Skip to content

Commit 04e217b

Browse files
committed
Random tests from backlog
1 parent 05a7d1e commit 04e217b

File tree

3 files changed

+104
-1
lines changed

3 files changed

+104
-1
lines changed

hibernate-core/src/test/java/org/hibernate/orm/test/component/basic/ComponentTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ protected void applySettings(StandardServiceRegistryBuilder builder) {
4747
builder.applySetting( Environment.GENERATE_STATISTICS, "true" );
4848
}
4949

50+
@Test
51+
void testJoining() {
52+
sessionFactory().inTransaction( (session) -> {
53+
session.createQuery( "select u from User u join u.person p" ).list();
54+
} );
55+
}
56+
5057
@Override
5158
public MetadataImplementor produceModel(StandardServiceRegistry serviceRegistry) {
5259
MetadataImplementor metadata = super.produceModel( serviceRegistry );
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.idclass;
6+
7+
import jakarta.persistence.Column;
8+
import jakarta.persistence.Entity;
9+
import jakarta.persistence.Id;
10+
import jakarta.persistence.IdClass;
11+
import jakarta.persistence.Table;
12+
import org.hibernate.testing.orm.junit.DomainModel;
13+
import org.hibernate.testing.orm.junit.SessionFactory;
14+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
15+
import org.junit.jupiter.api.Test;
16+
17+
/**
18+
* @author Steve Ebersole
19+
*/
20+
@DomainModel(annotatedClasses = {IdClassCtorTests.SystemUser.class, IdClassCtorTests.SystemUserId.class})
21+
@SessionFactory
22+
public class IdClassCtorTests {
23+
@Test
24+
void testIdClassRecordUsage(SessionFactoryScope factoryScope) {
25+
factoryScope.inTransaction( (session) -> {
26+
session.find( SystemUser.class, new SystemUserId( "payroll", "admin" ) );
27+
session.createQuery( "from SystemUser u where u.privileges % 2 = 0" ).list();
28+
} );
29+
}
30+
31+
@Entity(name="SystemUser")
32+
@Table(name="SystemUser")
33+
@IdClass( SystemUserId.class )
34+
public static class SystemUser {
35+
@Id
36+
private String systemName;
37+
@Id
38+
private String userName;
39+
@Column(name = "privs")
40+
private int privileges;
41+
}
42+
43+
public record SystemUserId(String systemName, String userName) {
44+
}
45+
}

hibernate-core/src/test/java/org/hibernate/orm/test/mapping/naturalid/XRefTests.java

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
package org.hibernate.orm.test.mapping.naturalid;
66

77
import jakarta.persistence.Entity;
8+
import jakarta.persistence.GeneratedValue;
89
import jakarta.persistence.Id;
10+
import jakarta.persistence.OptimisticLockException;
911
import jakarta.persistence.Table;
12+
import org.hibernate.StaleObjectStateException;
1013
import org.hibernate.annotations.NaturalId;
1114
import org.hibernate.annotations.NaturalIdCache;
1215
import org.hibernate.cache.internal.NaturalIdCacheKey;
@@ -27,14 +30,20 @@
2730
import org.junit.jupiter.api.Test;
2831

2932
import static org.assertj.core.api.Assertions.assertThat;
33+
import static org.assertj.core.api.Assertions.fail;
3034
import static org.hibernate.KeyType.NATURAL;
3135

3236
/// Tests for [org.hibernate.engine.spi.NaturalIdResolutions]
3337
///
3438
/// @author Steve Ebersole
3539
@SuppressWarnings("JUnitMalformedDeclaration")
3640
@ServiceRegistry(settings = @Setting( name = CacheSettings.USE_SECOND_LEVEL_CACHE, value = "true" ) )
37-
@DomainModel(annotatedClasses = {XRefTests.Book.class,XRefTests.Bookmark.class,XRefTests.Pen.class})
41+
@DomainModel(annotatedClasses = {
42+
XRefTests.Another.class,
43+
XRefTests.Book.class,
44+
XRefTests.Bookmark.class,
45+
XRefTests.Pen.class
46+
})
3847
@SessionFactory(useCollectingStatementInspector = true)
3948
public class XRefTests {
4049
public static final String BOOK_ISBN = "123-4567-890";
@@ -198,6 +207,31 @@ private void verifyCacheResolution(Class<?> entityType, String naturalId, int id
198207
assertThat( resolution.getValue() ).isEqualTo( id );
199208
}
200209

210+
@Test
211+
void testDeletionInOtherSession(SessionFactoryScope factoryScope) {
212+
var created = factoryScope.fromTransaction( (session) -> {
213+
var other = new Another( "something" );
214+
session.persist( other );
215+
return other;
216+
} );
217+
218+
factoryScope.inTransaction( (session) -> {
219+
var b = session.getReference( Another.class, created.id );
220+
session.remove( b );
221+
} );
222+
223+
created.name = "something else";
224+
try {
225+
factoryScope.inTransaction( (session) -> {
226+
session.merge( created );
227+
} );
228+
fail( "Expecting OptimisticLockException / StaleObjectStateException" );
229+
}
230+
catch (OptimisticLockException expected) {
231+
assertThat( expected.getCause() ).isInstanceOf( StaleObjectStateException.class );
232+
}
233+
}
234+
201235
@BeforeEach
202236
void createTestData(SessionFactoryScope factoryScope) {
203237
factoryScope.inTransaction( (session) -> {
@@ -273,4 +307,21 @@ public Pen(Integer id, String manufacturer, String sku) {
273307
this.sku = sku;
274308
}
275309
}
310+
311+
@Entity(name="Another")
312+
@Table(name="others")
313+
public static class Another {
314+
@Id
315+
@GeneratedValue
316+
private Integer id;
317+
@NaturalId
318+
private String name;
319+
320+
public Another() {
321+
}
322+
323+
public Another(String name) {
324+
this.name = name;
325+
}
326+
}
276327
}

0 commit comments

Comments
 (0)