Skip to content

Commit 10fe238

Browse files
Narosdreab8
authored andcommitted
HHH-11410 - Added test case.
1 parent 3c26ae7 commit 10fe238

File tree

1 file changed

+190
-0
lines changed

1 file changed

+190
-0
lines changed
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
6+
*/
7+
package org.hibernate.test.filter;
8+
9+
import java.io.Serializable;
10+
import java.util.Arrays;
11+
import java.util.HashSet;
12+
import java.util.Set;
13+
14+
import javax.persistence.Entity;
15+
import javax.persistence.Id;
16+
import javax.persistence.ManyToMany;
17+
import javax.persistence.MappedSuperclass;
18+
19+
import org.hibernate.annotations.Fetch;
20+
import org.hibernate.annotations.FetchMode;
21+
import org.hibernate.annotations.Filter;
22+
import org.hibernate.annotations.FilterDef;
23+
import org.junit.After;
24+
import org.junit.Before;
25+
import org.junit.Test;
26+
27+
import org.hibernate.testing.TestForIssue;
28+
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
29+
30+
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
31+
import static org.junit.Assert.assertEquals;
32+
import static org.junit.Assert.assertNotNull;
33+
import static org.junit.Assert.assertTrue;
34+
35+
/**
36+
* @author Chris Cranford
37+
*/
38+
public class ManyToManyWithDynamicFilterTest extends BaseCoreFunctionalTestCase {
39+
@Override
40+
protected Class<?>[] getAnnotatedClasses() {
41+
return new Class<?>[] { User.class, Role.class };
42+
}
43+
44+
@Before
45+
public void setUp() {
46+
doInHibernate( this::sessionFactory, session -> {
47+
final Role r1 = new Role( 1, "R1", false );
48+
final Role r2 = new Role( 2, "R2", false );
49+
session.save( r1 );
50+
session.save( r2 );
51+
52+
final User user = new User( 1, "A", true, r1, r2 );
53+
session.save( user );
54+
} );
55+
}
56+
57+
@After
58+
public void tearDown() {
59+
doInHibernate( this::sessionFactory, session -> {
60+
session.createQuery( "DELETE FROM User" ).executeUpdate();
61+
session.createQuery( "DELETE FROM Role" ).executeUpdate();
62+
} );
63+
}
64+
65+
@Test
66+
@TestForIssue(jiraKey = "HHH-11410")
67+
public void testManyToManyCollectionWithActiveFilterOnJoin() {
68+
doInHibernate( this::sessionFactory, session -> {
69+
session.enableFilter( "activeUserFilter" );
70+
session.enableFilter( "activeRoleFilter" );
71+
72+
final User user = session.get( User.class, 1 );
73+
assertNotNull( user );
74+
assertTrue( user.getRoles().isEmpty() );
75+
} );
76+
}
77+
78+
@Test
79+
@TestForIssue(jiraKey = "HHH-11410")
80+
public void testManyToManyCollectionWithNoFilterOnJoin() {
81+
doInHibernate( this::sessionFactory, session -> {
82+
final User user = session.get( User.class, 1 );
83+
assertNotNull( user );
84+
assertEquals( 2, user.getRoles().size() );
85+
} );
86+
}
87+
88+
@MappedSuperclass
89+
public static abstract class AbstractEntity implements Serializable {
90+
@Id
91+
private Integer id;
92+
93+
AbstractEntity() {
94+
95+
}
96+
97+
AbstractEntity(Integer id) {
98+
this.id = id;
99+
}
100+
101+
public Integer getId() {
102+
return id;
103+
}
104+
105+
public void setId(Integer id) {
106+
this.id = id;
107+
}
108+
}
109+
110+
@Entity(name = "User")
111+
@FilterDef(name = "activeUserFilter", defaultCondition = "active = true")
112+
@Filter(name = "activeUserFilter")
113+
public static class User extends AbstractEntity {
114+
private String name;
115+
private Boolean active;
116+
@ManyToMany
117+
@Fetch(FetchMode.JOIN)
118+
@Filter(name = "activeRoleFilter")
119+
private Set<Role> roles = new HashSet<>();
120+
121+
public User() {
122+
123+
}
124+
125+
public User(Integer id, String name, Boolean active, Role... roles) {
126+
super( id );
127+
this.name = name;
128+
this.active = active;
129+
this.roles = new HashSet<>( Arrays.asList( roles ) );
130+
}
131+
132+
public String getName() {
133+
return name;
134+
}
135+
136+
public void setName(String name) {
137+
this.name = name;
138+
}
139+
140+
public Boolean getActive() {
141+
return active;
142+
}
143+
144+
public void setActive(Boolean active) {
145+
this.active = active;
146+
}
147+
148+
public Set<Role> getRoles() {
149+
return roles;
150+
}
151+
152+
public void setRoles(Set<Role> roles) {
153+
this.roles = roles;
154+
}
155+
}
156+
157+
@Entity(name = "Role")
158+
@FilterDef(name = "activeRoleFilter", defaultCondition = "active = true")
159+
@Filter(name = "activeRoleFilter")
160+
public static class Role extends AbstractEntity {
161+
private String name;
162+
private Boolean active;
163+
164+
Role() {
165+
166+
}
167+
168+
public Role(Integer id, String name, Boolean active) {
169+
super( id );
170+
this.name = name;
171+
this.active = active;
172+
}
173+
174+
public String getName() {
175+
return name;
176+
}
177+
178+
public void setName(String name) {
179+
this.name = name;
180+
}
181+
182+
public Boolean getActive() {
183+
return active;
184+
}
185+
186+
public void setActive(Boolean active) {
187+
this.active = active;
188+
}
189+
}
190+
}

0 commit comments

Comments
 (0)