Skip to content

Commit db75ae2

Browse files
committed
HHH-3319 Test for extra lazy ops on unowned one-to-many with restriction
1 parent 87f363d commit db75ae2

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
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.collection.basic;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.FetchType;
9+
import jakarta.persistence.Id;
10+
import jakarta.persistence.ManyToOne;
11+
import jakarta.persistence.OneToMany;
12+
import org.hibernate.Hibernate;
13+
import org.hibernate.annotations.SQLRestriction;
14+
import org.hibernate.testing.orm.junit.DomainModel;
15+
import org.hibernate.testing.orm.junit.JiraKey;
16+
import org.hibernate.testing.orm.junit.SessionFactory;
17+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
18+
import org.junit.jupiter.api.Test;
19+
20+
import java.util.HashSet;
21+
import java.util.Set;
22+
23+
import static org.junit.jupiter.api.Assertions.assertEquals;
24+
import static org.junit.jupiter.api.Assertions.assertFalse;
25+
import static org.junit.jupiter.api.Assertions.assertTrue;
26+
27+
@DomainModel(
28+
annotatedClasses = {
29+
CollectionOneToManySizeTest.Order.class, CollectionOneToManySizeTest.OrderItem.class
30+
}
31+
)
32+
@SessionFactory
33+
public class CollectionOneToManySizeTest {
34+
35+
@Test
36+
@JiraKey("HHH-3319")
37+
public void prepareData(SessionFactoryScope scope) {
38+
scope.inTransaction(
39+
session -> {
40+
Order o = new Order();
41+
o.id = 1L;
42+
o.orderItems = new HashSet<>();
43+
OrderItem oi1 = new OrderItem();
44+
oi1.id = 1L;
45+
oi1.order = o;
46+
OrderItem oi2 = new OrderItem();
47+
oi2.id = 2L;
48+
oi2.order = o;
49+
oi2.status = 1;
50+
51+
o.orderItems.add( oi1 );
52+
o.orderItems.add( oi2 );
53+
54+
session.persist( o );
55+
session.persist( oi1 );
56+
session.persist( oi2 );
57+
session.flush();
58+
}
59+
);
60+
scope.inTransaction(
61+
session -> {
62+
Order o = session.find( Order.class, 1L );
63+
64+
Set<OrderItem> orderItems = o.orderItems;
65+
assertEquals( 1, Hibernate.size( orderItems ) );
66+
assertTrue( Hibernate.contains( orderItems, session.getReference( OrderItem.class, 1L ) ) );
67+
assertFalse( Hibernate.contains( orderItems, session.getReference( OrderItem.class, 2L ) ) );
68+
assertFalse( Hibernate.isInitialized( orderItems ) );
69+
}
70+
);
71+
}
72+
73+
@Entity
74+
public static class Order {
75+
@Id
76+
Long id;
77+
@OneToMany(mappedBy = "order")
78+
@SQLRestriction("status=0")
79+
Set<OrderItem> orderItems;
80+
}
81+
82+
@Entity
83+
public static class OrderItem {
84+
@Id
85+
Long id;
86+
@ManyToOne(fetch = FetchType.LAZY)
87+
Order order;
88+
int status;
89+
}
90+
91+
}

0 commit comments

Comments
 (0)