Skip to content

Commit 5d35c19

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

File tree

4 files changed

+211
-0
lines changed

4 files changed

+211
-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.hhh00000.model;
2+
3+
import javax.persistence.Column;
4+
import javax.persistence.Entity;
5+
import javax.persistence.Id;
6+
7+
@Entity
8+
public class HHH00000Entity {
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.hhh00000.model;
2+
3+
import javax.persistence.metamodel.SingularAttribute;
4+
import javax.persistence.metamodel.StaticMetamodel;
5+
6+
@StaticMetamodel(HHH00000Entity.class)
7+
public class HHH00000Entity_ {
8+
public static volatile SingularAttribute<HHH00000Entity, String> KeyString;
9+
public static volatile SingularAttribute<HHH00000Entity, String> itemString1;
10+
public static volatile SingularAttribute<HHH00000Entity, Integer> itemInteger1;
11+
}
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
package org.hibernate.bugs.hhh00000.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.hhh00000.model.HHH00000Entity;
13+
import org.hibernate.bugs.hhh00000.model.HHH00000Entity_;
14+
import org.junit.After;
15+
import org.junit.Before;
16+
import org.junit.Test;
17+
18+
public class HHH00000UnitTestCase {
19+
private EntityManagerFactory entityManagerFactory;
20+
21+
@Before
22+
public void init() {
23+
entityManagerFactory = Persistence.createEntityManagerFactory("hhh00000PU");
24+
}
25+
26+
@After
27+
public void destroy() {
28+
entityManagerFactory.close();
29+
}
30+
31+
@Test
32+
public void hhh00000test1() 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+
Query query = entityManager.createQuery("UPDATE HHH00000Entity t SET t.itemInteger1 = ?1 WHERE t.itemString1 = ?2");
39+
query.setParameter(1, 9);
40+
query.setParameter(2, "B");
41+
42+
query.executeUpdate();
43+
} finally {
44+
if (entityManager.isOpen()) {
45+
entityManager.clear();
46+
entityManager.close();
47+
}
48+
}
49+
50+
// Equivalent query, but fails
51+
entityManager = entityManagerFactory.createEntityManager();
52+
try {
53+
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
54+
CriteriaUpdate<HHH00000Entity> cquery = cb.createCriteriaUpdate(HHH00000Entity.class);
55+
Root<HHH00000Entity> root = cquery.from(HHH00000Entity.class);
56+
57+
ParameterExpression<Integer> intValue = cb.parameter(Integer.class);
58+
ParameterExpression<String> strValue = cb.parameter(String.class);
59+
60+
cquery.set(root.get(HHH00000Entity_.itemInteger1), intValue);
61+
cquery.where(cb.equal(root.get(HHH00000Entity_.itemString1), strValue));
62+
63+
Query query = entityManager.createQuery(cquery);
64+
query.setParameter(intValue, 9);
65+
query.setParameter(strValue, "B");
66+
67+
query.executeUpdate();
68+
} finally {
69+
if (entityManager.isOpen()) {
70+
entityManager.clear();
71+
entityManager.close();
72+
}
73+
}
74+
}
75+
76+
@Test
77+
public void hhh00000test2() throws Exception {
78+
System.out.println("Printed Version String: " + org.hibernate.Version.getVersionString());
79+
80+
// Should pass
81+
EntityManager entityManager = entityManagerFactory.createEntityManager();
82+
try {
83+
Query query = entityManager.createQuery("UPDATE HHH00000Entity t SET t.itemInteger1 = ?1 WHERE t.itemString1 = ?2");
84+
query.setParameter(1, 9);
85+
query.setParameter(2, "B");
86+
87+
query.executeUpdate();
88+
} finally {
89+
if (entityManager.isOpen()) {
90+
entityManager.clear();
91+
entityManager.close();
92+
}
93+
}
94+
95+
// Equivalent query, but fails
96+
entityManager = entityManagerFactory.createEntityManager();
97+
try {
98+
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
99+
CriteriaUpdate<HHH00000Entity> cquery = cb.createCriteriaUpdate(HHH00000Entity.class);
100+
Root<HHH00000Entity> root = cquery.from(HHH00000Entity.class);
101+
102+
ParameterExpression<Integer> intValue = cb.parameter(Integer.class);
103+
ParameterExpression<String> strValue = cb.parameter(String.class);
104+
105+
cquery.set("itemInteger1", intValue);
106+
cquery.where(cb.equal(root.get("itemString1"), strValue));
107+
108+
Query query = entityManager.createQuery(cquery);
109+
query.setParameter(intValue, 9);
110+
query.setParameter(strValue, "B");
111+
112+
query.executeUpdate();
113+
} finally {
114+
if (entityManager.isOpen()) {
115+
entityManager.clear();
116+
entityManager.close();
117+
}
118+
}
119+
}
120+
}

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="hhh00000PU" transaction-type="RESOURCE_LOCAL">
8+
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
9+
<class>org.hibernate.bugs.hhh00000.model.HHH00000Entity</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)