Skip to content

Commit 58a4a4d

Browse files
committed
HHH-953 / HHH-15667 Test cases for these issues
Signed-off-by: Jan Schatteman <[email protected]>
1 parent fdae11f commit 58a4a4d

File tree

1 file changed

+139
-0
lines changed

1 file changed

+139
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.bytecode.enhancement.lazy;
6+
7+
import java.util.List;
8+
9+
import org.hibernate.Hibernate;
10+
11+
import org.hibernate.testing.FailureExpected;
12+
import org.hibernate.testing.orm.junit.JiraKey;
13+
import org.junit.After;
14+
import org.junit.Before;
15+
import org.junit.Test;
16+
import org.junit.jupiter.api.Assertions;
17+
import org.junit.runner.RunWith;
18+
19+
import jakarta.persistence.Basic;
20+
import jakarta.persistence.Entity;
21+
import jakarta.persistence.EntityResult;
22+
import jakarta.persistence.FetchType;
23+
import jakarta.persistence.FieldResult;
24+
import jakarta.persistence.Id;
25+
import jakarta.persistence.NamedNativeQuery;
26+
import jakarta.persistence.SqlResultSetMapping;
27+
import jakarta.persistence.Table;
28+
29+
import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner;
30+
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
31+
32+
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
33+
34+
/**
35+
* @author Jan Schatteman
36+
* @author Christian Beikov
37+
*/
38+
@RunWith( BytecodeEnhancerRunner.class )
39+
public class LazySqlResultMappingTest extends BaseCoreFunctionalTestCase {
40+
41+
@Override
42+
protected Class<?>[] getAnnotatedClasses() {
43+
return new Class[]{ User.class };
44+
}
45+
46+
@Before
47+
public void prepareData() {
48+
doInHibernate( this::sessionFactory,
49+
session -> {
50+
session.persist(new User(1L, (byte)1));
51+
}
52+
);
53+
}
54+
55+
@After
56+
public void cleanupData() {
57+
doInHibernate( this::sessionFactory,
58+
session -> {
59+
session.createMutationQuery("delete from User").executeUpdate();
60+
}
61+
);
62+
}
63+
64+
@Test
65+
public void testGetIdAndPrincipalUsingFieldResults() {
66+
doInHibernate( this::sessionFactory,
67+
session -> {
68+
List<User> users = session.createNamedQuery( "getIdAndPrincipalUsingFieldResults", User.class ).getResultList();
69+
Assertions.assertTrue( Hibernate.isPropertyInitialized( users.get(0), "principal" ) );
70+
}
71+
);
72+
}
73+
74+
@Test
75+
@JiraKey( value = "HHH-953" )
76+
public void testGetIdAndPrincipalWithoutUsingFieldResults() {
77+
doInHibernate( this::sessionFactory,
78+
session -> {
79+
List<User> users = session.createNamedQuery( "getIdAndPrincipalWithoutUsingFieldResults", User.class ).getResultList();
80+
Assertions.assertTrue( Hibernate.isPropertyInitialized( users.get(0), "principal" ) );
81+
}
82+
);
83+
}
84+
85+
@Test
86+
@JiraKey( value = "HHH-15667" )
87+
@FailureExpected(jiraKey = "HHH-15667", message = "SQLGrammarException: Unable to find column position by name: principal")
88+
public void testGetIdWithoutUsingFieldResults() {
89+
doInHibernate( this::sessionFactory,
90+
session -> {
91+
List<User> users = session.createNamedQuery( "getIdWithoutUsingFieldResults", User.class ).getResultList();
92+
Assertions.assertFalse( Hibernate.isPropertyInitialized( users.get(0), "principal" ) );
93+
}
94+
);
95+
}
96+
97+
@Test
98+
public void testGetIdUsingFieldResults() {
99+
doInHibernate( this::sessionFactory,
100+
session -> {
101+
List<User> users = session.createNamedQuery( "getIdUsingFieldResults", User.class ).getResultList();
102+
Assertions.assertFalse( Hibernate.isPropertyInitialized( users.get(0), "principal" ) );
103+
}
104+
);
105+
}
106+
107+
@NamedNativeQuery(name = "getIdAndPrincipalUsingFieldResults", query = "select u.id as id, u.principal as principal from user_tbl u", resultSetMapping = "id_and_principal_with_fields")
108+
@NamedNativeQuery(name = "getIdUsingFieldResults", query = "select u.id as id from user_tbl u", resultSetMapping = "id_with_fields")
109+
@NamedNativeQuery(name = "getIdAndPrincipalWithoutUsingFieldResults", query = "select u.id as id, u.principal as principal from user_tbl u", resultSetMapping = "without_fields")
110+
@NamedNativeQuery(name = "getIdWithoutUsingFieldResults", query = "select u.id as id from user_tbl u", resultSetMapping = "without_fields")
111+
112+
@SqlResultSetMapping( name = "id_and_principal_with_fields",
113+
entities = @EntityResult( entityClass = User.class, fields = { @FieldResult(name = "id", column = "id"), @FieldResult(name = "principal", column = "principal") } )
114+
)
115+
@SqlResultSetMapping( name = "id_with_fields",
116+
entities = @EntityResult( entityClass = User.class, fields = { @FieldResult(name = "id", column = "id") } )
117+
)
118+
@SqlResultSetMapping( name = "without_fields",
119+
entities = @EntityResult( entityClass = User.class )
120+
)
121+
122+
@Entity( name = "User")
123+
@Table(name = "user_tbl")
124+
private static class User {
125+
@Id
126+
private Long id;
127+
@Basic(fetch = FetchType.LAZY)
128+
private Byte principal;
129+
130+
public User() {
131+
}
132+
133+
public User(Long id, Byte principal) {
134+
this.id = id;
135+
this.principal = principal;
136+
}
137+
}
138+
139+
}

0 commit comments

Comments
 (0)