Skip to content

Commit f355d06

Browse files
committed
HHH-10166 - Sequence generator creates duplicate keys
(cherry picked from commit 3b2157b)
1 parent b261f35 commit f355d06

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
6+
*/
7+
package org.hibernate.test.id.sequence;
8+
9+
import javax.persistence.Entity;
10+
import javax.persistence.GeneratedValue;
11+
import javax.persistence.GenerationType;
12+
import javax.persistence.Id;
13+
import javax.persistence.SequenceGenerator;
14+
import javax.persistence.Table;
15+
16+
import org.hibernate.Session;
17+
18+
import org.hibernate.testing.TestForIssue;
19+
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
20+
import org.junit.Test;
21+
22+
import static org.hamcrest.CoreMatchers.notNullValue;
23+
import static org.junit.Assert.assertThat;
24+
25+
/**
26+
* @author Steve Ebersole
27+
*/
28+
public class OptimizerTest extends BaseNonConfigCoreFunctionalTestCase {
29+
@Test
30+
@TestForIssue( jiraKey = "HHH-10166" )
31+
public void testGenerationPastBound() {
32+
Session session = openSession();
33+
session.getTransaction().begin();
34+
for (int i = 0; i < 100; i++) {
35+
TheEntity entity = new TheEntity( Integer.toString( i ) );
36+
session.save( entity );
37+
}
38+
session.getTransaction().commit();
39+
session.close();
40+
41+
session = openSession();
42+
session.getTransaction().begin();
43+
TheEntity number100 = session.get( TheEntity.class, 100 );
44+
assertThat( number100, notNullValue() );
45+
session.createQuery( "delete TheEntity" ).executeUpdate();
46+
session.getTransaction().commit();
47+
session.close();
48+
}
49+
50+
@Override
51+
protected Class[] getAnnotatedClasses() {
52+
return new Class[] { TheEntity.class };
53+
}
54+
55+
@Entity( name = "TheEntity" )
56+
@Table( name = "TheEntity" )
57+
public static class TheEntity {
58+
@Id
59+
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "seq1" )
60+
@SequenceGenerator( name = "seq1", sequenceName = "the_sequence" )
61+
public Integer id;
62+
public String someString;
63+
64+
public TheEntity() {
65+
}
66+
67+
public TheEntity(String someString) {
68+
this.someString = someString;
69+
}
70+
}
71+
}

0 commit comments

Comments
 (0)