Skip to content

Commit b9e2e69

Browse files
committed
HHH-8404 test case
1 parent 4ac4ed2 commit b9e2e69

File tree

3 files changed

+114
-14
lines changed

3 files changed

+114
-14
lines changed

hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/criteria/QueryBuilderTest.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,21 @@
2323
*/
2424
package org.hibernate.jpa.test.criteria;
2525

26+
import static org.junit.Assert.assertEquals;
27+
2628
import java.util.ArrayList;
27-
import java.util.Collection;
2829
import java.util.List;
30+
2931
import javax.persistence.EntityManager;
3032
import javax.persistence.TypedQuery;
3133
import javax.persistence.criteria.CriteriaQuery;
3234
import javax.persistence.criteria.Root;
3335
import javax.persistence.metamodel.EntityType;
3436

35-
import org.junit.Test;
36-
3737
import org.hibernate.jpa.criteria.CriteriaBuilderImpl;
3838
import org.hibernate.jpa.criteria.predicate.ComparisonPredicate;
39+
import org.hibernate.jpa.internal.metamodel.MetamodelImpl;
40+
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
3941
import org.hibernate.jpa.test.metamodel.Address;
4042
import org.hibernate.jpa.test.metamodel.Alias;
4143
import org.hibernate.jpa.test.metamodel.Country;
@@ -44,17 +46,13 @@
4446
import org.hibernate.jpa.test.metamodel.Customer_;
4547
import org.hibernate.jpa.test.metamodel.Info;
4648
import org.hibernate.jpa.test.metamodel.LineItem;
47-
import org.hibernate.jpa.internal.metamodel.MetamodelImpl;
4849
import org.hibernate.jpa.test.metamodel.Order;
4950
import org.hibernate.jpa.test.metamodel.Phone;
5051
import org.hibernate.jpa.test.metamodel.Product;
5152
import org.hibernate.jpa.test.metamodel.ShelfLife;
5253
import org.hibernate.jpa.test.metamodel.Spouse;
53-
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
54-
5554
import org.hibernate.testing.TestForIssue;
56-
57-
import static org.junit.Assert.assertEquals;
55+
import org.junit.Test;
5856

5957
/**
6058
* @author Steve Ebersole
@@ -127,7 +125,7 @@ public void testEqualityComparisonEntityConversion() {
127125
Phone phone3 = new Phone( "3", "555", "0003", address );
128126
Phone phone4 = new Phone( "4", "555", "0004" );
129127

130-
Collection<Phone> phones = new ArrayList<Phone>( 3 );
128+
List<Phone> phones = new ArrayList<Phone>( 3 );
131129
phones.add( phone1 );
132130
phones.add( phone2 );
133131
phones.add( phone3 );
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
5+
* indicated by the @author tags or express copyright attribution
6+
* statements applied by the authors. All third-party contributions are
7+
* distributed under license by Red Hat Inc.
8+
*
9+
* This copyrighted material is made available to anyone wishing to use, modify,
10+
* copy, or redistribute it subject to the terms and conditions of the GNU
11+
* Lesser General Public License, as published by the Free Software Foundation.
12+
*
13+
* This program is distributed in the hope that it will be useful,
14+
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15+
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
16+
* for more details.
17+
*
18+
* You should have received a copy of the GNU Lesser General Public License
19+
* along with this distribution; if not, write to:
20+
* Free Software Foundation, Inc.
21+
* 51 Franklin Street, Fifth Floor
22+
* Boston, MA 02110-1301 USA
23+
*/
24+
package org.hibernate.jpa.test.criteria.basic;
25+
26+
import static org.junit.Assert.assertEquals;
27+
import static org.junit.Assert.assertNotNull;
28+
29+
import java.util.List;
30+
31+
import javax.persistence.EntityManager;
32+
import javax.persistence.criteria.CriteriaBuilder;
33+
import javax.persistence.criteria.CriteriaQuery;
34+
import javax.persistence.criteria.ListJoin;
35+
import javax.persistence.criteria.Root;
36+
37+
import org.hibernate.jpa.test.metamodel.AbstractMetamodelSpecificTest;
38+
import org.hibernate.jpa.test.metamodel.Address;
39+
import org.hibernate.jpa.test.metamodel.Address_;
40+
import org.hibernate.jpa.test.metamodel.Phone;
41+
import org.hibernate.testing.TestForIssue;
42+
import org.junit.Test;
43+
44+
/**
45+
* Tests usage of {@link ListJoin#index()}
46+
*
47+
* @author Brett Meyer
48+
*/
49+
public class ListIndexTest extends AbstractMetamodelSpecificTest {
50+
51+
@Test
52+
@TestForIssue(jiraKey = "HHH-8404")
53+
public void testListIndex() {
54+
EntityManager em = getOrCreateEntityManager();
55+
56+
em.getTransaction().begin();
57+
58+
Address address1 = new Address();
59+
address1.setId( "a1" );
60+
Phone phone1 = new Phone();
61+
phone1.setId( "p1" );
62+
phone1.setAddress( address1 );
63+
Phone phone2 = new Phone();
64+
phone2.setId( "p2" );
65+
66+
phone2.setAddress( address1 );
67+
address1.getPhones().add( phone1 );
68+
address1.getPhones().add( phone2 );
69+
70+
Address address2 = new Address();
71+
address2.setId( "a2" );
72+
Phone phone3 = new Phone();
73+
phone3.setId( "p3" );
74+
75+
phone3.setAddress( address2 );
76+
address2.getPhones().add( phone3 );
77+
78+
em.persist( phone1 );
79+
em.persist( phone2 );
80+
em.persist( phone3 );
81+
em.persist( address1 );
82+
em.persist( address2 );
83+
em.getTransaction().commit();
84+
em.clear();
85+
86+
CriteriaBuilder cb = em.getCriteriaBuilder();
87+
CriteriaQuery<Address> criteria = cb.createQuery( Address.class );
88+
Root<Address> addressRoot = criteria.from( Address.class );
89+
ListJoin<Address, Phone> phones = addressRoot.join( Address_.phones );
90+
criteria.where( cb.gt( phones.index(), 0 ) );
91+
List<Address> results = em.createQuery( criteria ).getResultList();
92+
93+
assertNotNull( results );
94+
// Ensure that the "index(phones) > 0" condition was included on the inner join, meaning only address1
95+
// (> 1 phone) was returned.
96+
assertEquals( 1, results.size() );
97+
assertEquals( address1.getId(), results.get( 0 ).getId() );
98+
}
99+
}

hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/metamodel/Address.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@
2222
* Boston, MA 02110-1301 USA
2323
*/
2424
package org.hibernate.jpa.test.metamodel;
25-
import java.util.Collection;
25+
import java.util.List;
26+
2627
import javax.persistence.CascadeType;
2728
import javax.persistence.Column;
2829
import javax.persistence.Entity;
2930
import javax.persistence.Id;
3031
import javax.persistence.OneToMany;
32+
import javax.persistence.OrderColumn;
3133
import javax.persistence.Table;
3234

3335
/**
@@ -43,7 +45,7 @@ public class Address implements java.io.Serializable {
4345
private String city;
4446
private String state;
4547
private String zip;
46-
private Collection<Phone> phones = new java.util.ArrayList<Phone>();
48+
private List<Phone> phones = new java.util.ArrayList<Phone>();
4749

4850
public Address() {
4951
}
@@ -57,7 +59,7 @@ public Address(String id, String street, String city, String state, String zip)
5759
}
5860

5961
public Address(String id, String street, String city, String state, String zip,
60-
Collection<Phone> phones) {
62+
List<Phone> phones) {
6163
this.id = id;
6264
this.street = street;
6365
this.city = city;
@@ -113,11 +115,12 @@ public void setZip(String zip) {
113115
}
114116

115117
@OneToMany(cascade = CascadeType.ALL, mappedBy = "address")
116-
public Collection<Phone> getPhones() {
118+
@OrderColumn
119+
public List<Phone> getPhones() {
117120
return phones;
118121
}
119122

120-
public void setPhones(Collection<Phone> phones) {
123+
public void setPhones(List<Phone> phones) {
121124
this.phones = phones;
122125
}
123126
}

0 commit comments

Comments
 (0)