Skip to content

Commit 0ba06bc

Browse files
committed
HHH15113: Testing CriteriaBuilder parameter setting
Signed-off-by: Will Dazey <[email protected]>
1 parent fb30667 commit 0ba06bc

File tree

4 files changed

+231
-0
lines changed

4 files changed

+231
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.hibernate.bugs.hhh15113.model;
2+
3+
import javax.persistence.Column;
4+
import javax.persistence.Entity;
5+
import javax.persistence.Id;
6+
7+
@Entity
8+
public class HHH15113Entity {
9+
10+
@Id
11+
@Column(name = "KEY_CHAR")
12+
private String KeyString;
13+
14+
@Column(name = "ITEM_STRING1")
15+
private String itemString1;
16+
17+
@Column(name = "ITEM_INTEGER1")
18+
private Integer itemInteger1;
19+
20+
public String getKeyString() {
21+
return KeyString;
22+
}
23+
24+
public void setKeyString(String keyString) {
25+
KeyString = keyString;
26+
}
27+
28+
public String getItemString1() {
29+
return itemString1;
30+
}
31+
32+
public void setItemString1(String itemString1) {
33+
this.itemString1 = itemString1;
34+
}
35+
36+
public Integer getItemInteger1() {
37+
return itemInteger1;
38+
}
39+
40+
public void setItemInteger1(Integer itemInteger1) {
41+
this.itemInteger1 = itemInteger1;
42+
}
43+
44+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.hibernate.bugs.hhh15113.model;
2+
3+
import javax.persistence.metamodel.SingularAttribute;
4+
import javax.persistence.metamodel.StaticMetamodel;
5+
6+
@StaticMetamodel(HHH15113Entity.class)
7+
public class HHH15113Entity_ {
8+
public static volatile SingularAttribute<HHH15113Entity, String> KeyString;
9+
public static volatile SingularAttribute<HHH15113Entity, String> itemString1;
10+
public static volatile SingularAttribute<HHH15113Entity, Integer> itemInteger1;
11+
}
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package org.hibernate.bugs.hhh15113.test;
2+
3+
import javax.persistence.EntityManager;
4+
import javax.persistence.EntityManagerFactory;
5+
import javax.persistence.Persistence;
6+
import javax.persistence.Query;
7+
import javax.persistence.criteria.CriteriaBuilder;
8+
import javax.persistence.criteria.CriteriaUpdate;
9+
import javax.persistence.criteria.ParameterExpression;
10+
import javax.persistence.criteria.Root;
11+
12+
import org.hibernate.bugs.hhh15113.model.HHH15113Entity;
13+
import org.hibernate.bugs.hhh15113.model.HHH15113Entity_;
14+
import org.junit.After;
15+
import org.junit.Before;
16+
import org.junit.Test;
17+
18+
public class HHH15113UnitTestCase {
19+
private EntityManagerFactory entityManagerFactory;
20+
21+
@Before
22+
public void init() {
23+
entityManagerFactory = Persistence.createEntityManagerFactory("hhh15113PU");
24+
}
25+
26+
@After
27+
public void destroy() {
28+
entityManagerFactory.close();
29+
}
30+
31+
@Test
32+
public void hhh15113test1() throws Exception {
33+
System.out.println("Printed Version String: " + org.hibernate.Version.getVersionString());
34+
35+
// Should pass
36+
EntityManager entityManager = entityManagerFactory.createEntityManager();
37+
try {
38+
entityManager.getTransaction().begin();
39+
40+
Query query = entityManager.createQuery("UPDATE HHH15113Entity t SET t.itemInteger1 = ?1 WHERE t.itemString1 = ?2");
41+
query.setParameter(1, 9);
42+
query.setParameter(2, "B");
43+
44+
query.executeUpdate();
45+
} finally {
46+
if(entityManager.getTransaction().isActive()) {
47+
entityManager.getTransaction().rollback();
48+
}
49+
if (entityManager.isOpen()) {
50+
entityManager.clear();
51+
entityManager.close();
52+
}
53+
}
54+
55+
// Equivalent query, but fails
56+
entityManager = entityManagerFactory.createEntityManager();
57+
try {
58+
entityManager.getTransaction().begin();
59+
60+
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
61+
CriteriaUpdate<HHH15113Entity> cquery = cb.createCriteriaUpdate(HHH15113Entity.class);
62+
Root<HHH15113Entity> root = cquery.from(HHH15113Entity.class);
63+
64+
ParameterExpression<Integer> intValue = cb.parameter(Integer.class);
65+
ParameterExpression<String> strValue = cb.parameter(String.class);
66+
67+
cquery.set(root.get(HHH15113Entity_.itemInteger1), intValue);
68+
cquery.where(cb.equal(root.get(HHH15113Entity_.itemString1), strValue));
69+
70+
Query query = entityManager.createQuery(cquery);
71+
query.setParameter(intValue, 9);
72+
query.setParameter(strValue, "B");
73+
74+
query.executeUpdate();
75+
} finally {
76+
if(entityManager.getTransaction().isActive()) {
77+
entityManager.getTransaction().rollback();
78+
}
79+
if (entityManager.isOpen()) {
80+
entityManager.clear();
81+
entityManager.close();
82+
}
83+
}
84+
}
85+
86+
@Test
87+
public void hhh15113test2() throws Exception {
88+
System.out.println("Printed Version String: " + org.hibernate.Version.getVersionString());
89+
90+
// Should pass
91+
EntityManager entityManager = entityManagerFactory.createEntityManager();
92+
try {
93+
entityManager.getTransaction().begin();
94+
95+
Query query = entityManager.createQuery("UPDATE HHH15113Entity t SET t.itemInteger1 = ?1 WHERE t.itemString1 = ?2");
96+
query.setParameter(1, 9);
97+
query.setParameter(2, "B");
98+
99+
query.executeUpdate();
100+
} finally {
101+
if(entityManager.getTransaction().isActive()) {
102+
entityManager.getTransaction().rollback();
103+
}
104+
if (entityManager.isOpen()) {
105+
entityManager.clear();
106+
entityManager.close();
107+
}
108+
}
109+
110+
// Equivalent query, but fails
111+
entityManager = entityManagerFactory.createEntityManager();
112+
try {
113+
entityManager.getTransaction().begin();
114+
115+
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
116+
CriteriaUpdate<HHH15113Entity> cquery = cb.createCriteriaUpdate(HHH15113Entity.class);
117+
Root<HHH15113Entity> root = cquery.from(HHH15113Entity.class);
118+
119+
ParameterExpression<Integer> intValue = cb.parameter(Integer.class);
120+
ParameterExpression<String> strValue = cb.parameter(String.class);
121+
122+
cquery.set("itemInteger1", intValue);
123+
cquery.where(cb.equal(root.get("itemString1"), strValue));
124+
125+
Query query = entityManager.createQuery(cquery);
126+
query.setParameter(intValue, 9);
127+
query.setParameter(strValue, "B");
128+
129+
query.executeUpdate();
130+
} finally {
131+
if(entityManager.getTransaction().isActive()) {
132+
entityManager.getTransaction().rollback();
133+
}
134+
if (entityManager.isOpen()) {
135+
entityManager.clear();
136+
entityManager.close();
137+
}
138+
}
139+
}
140+
}

orm/hibernate-orm-5/src/test/resources/META-INF/persistence.xml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,42 @@
44
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
55
version="2.1">
66

7+
<persistence-unit name="hhh15113PU" transaction-type="RESOURCE_LOCAL">
8+
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
9+
<class>org.hibernate.bugs.hhh15113.model.HHH15113Entity</class>
10+
<exclude-unlisted-classes>true</exclude-unlisted-classes>
11+
<properties>
12+
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
13+
14+
<property name="hibernate.archive.autodetection" value="class, hbm"/>
15+
16+
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
17+
<property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
18+
<property name="hibernate.connection.url" value="jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1"/>
19+
<property name="hibernate.connection.username" value="sa"/>
20+
21+
<property name="hibernate.connection.pool_size" value="5"/>
22+
23+
<property name="hibernate.show_sql" value="true"/>
24+
<property name="hibernate.format_sql" value="true"/>
25+
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
26+
27+
<property name="hibernate.max_fetch_depth" value="5"/>
28+
29+
<property name="hibernate.cache.region_prefix" value="hibernate.test"/>
30+
<property name="hibernate.cache.region.factory_class"
31+
value="org.hibernate.testing.cache.CachingRegionFactory"/>
32+
33+
<!--NOTE: hibernate.jdbc.batch_versioned_data should be set to false when testing with Oracle-->
34+
<property name="hibernate.jdbc.batch_versioned_data" value="true"/>
35+
36+
<property name="javax.persistence.validation.mode" value="NONE"/>
37+
<property name="hibernate.service.allow_crawling" value="false"/>
38+
<property name="hibernate.session.events.log" value="true"/>
39+
</properties>
40+
41+
</persistence-unit>
42+
743
<persistence-unit name="templatePU" transaction-type="RESOURCE_LOCAL">
844

945
<description>Hibernate test case template Persistence Unit</description>

0 commit comments

Comments
 (0)