|
22 | 22 | * Boston, MA 02110-1301 USA
|
23 | 23 | */
|
24 | 24 | package org.hibernate.test.collection.map;
|
25 |
| -import java.util.HashMap; |
26 |
| - |
27 |
| -import org.junit.Test; |
28 |
| - |
29 |
| -import org.hibernate.Session; |
30 |
| -import org.hibernate.collection.internal.PersistentMap; |
31 |
| -import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; |
32 |
| - |
33 | 25 | import static org.junit.Assert.assertEquals;
|
34 | 26 | import static org.junit.Assert.assertFalse;
|
35 | 27 | import static org.junit.Assert.assertNotNull;
|
36 | 28 | import static org.junit.Assert.assertNull;
|
37 | 29 | import static org.junit.Assert.assertTrue;
|
38 | 30 |
|
| 31 | +import java.io.Serializable; |
| 32 | +import java.util.HashMap; |
| 33 | +import java.util.Map; |
| 34 | + |
| 35 | +import javax.persistence.CascadeType; |
| 36 | +import javax.persistence.Entity; |
| 37 | +import javax.persistence.FetchType; |
| 38 | +import javax.persistence.GeneratedValue; |
| 39 | +import javax.persistence.Id; |
| 40 | +import javax.persistence.JoinColumn; |
| 41 | +import javax.persistence.ManyToOne; |
| 42 | +import javax.persistence.MapKeyColumn; |
| 43 | +import javax.persistence.OneToMany; |
| 44 | + |
| 45 | +import org.hibernate.Query; |
| 46 | +import org.hibernate.Session; |
| 47 | +import org.hibernate.collection.internal.PersistentMap; |
| 48 | +import org.hibernate.testing.TestForIssue; |
| 49 | +import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; |
| 50 | +import org.junit.Test; |
| 51 | + |
39 | 52 | /**
|
40 | 53 | * Test various situations using a {@link PersistentMap}.
|
41 | 54 | *
|
42 | 55 | * @author Steve Ebersole
|
| 56 | + * @author Brett Meyer |
43 | 57 | */
|
44 | 58 | public class PersistentMapTest extends BaseCoreFunctionalTestCase {
|
45 | 59 | @Override
|
46 | 60 | public String[] getMappings() {
|
47 | 61 | return new String[] { "collection/map/Mappings.hbm.xml" };
|
48 | 62 | }
|
| 63 | + |
| 64 | + @Override |
| 65 | + protected Class<?>[] getAnnotatedClasses() { |
| 66 | + return new Class<?>[] { User.class, UserData.class }; |
| 67 | + } |
49 | 68 |
|
50 | 69 | @Test
|
51 | 70 | @SuppressWarnings({ "unchecked" })
|
@@ -157,4 +176,57 @@ public void testRemoveAgainstUninitializedMap() {
|
157 | 176 | session.getTransaction().commit();
|
158 | 177 | session.close();
|
159 | 178 | }
|
| 179 | + |
| 180 | + @Test |
| 181 | + @TestForIssue(jiraKey = "HHH-5732") |
| 182 | + public void testClearMap() { |
| 183 | + Session s = openSession(); |
| 184 | + s.beginTransaction(); |
| 185 | + |
| 186 | + User user = new User(); |
| 187 | + UserData userData = new UserData(); |
| 188 | + userData.user = user; |
| 189 | + user.userDatas.put( "foo", userData ); |
| 190 | + s.persist( user ); |
| 191 | + |
| 192 | + s.getTransaction().commit(); |
| 193 | + s.clear(); |
| 194 | + |
| 195 | + s.beginTransaction(); |
| 196 | + |
| 197 | + user = (User) s.get( User.class, 1 ); |
| 198 | + user.userDatas.clear(); |
| 199 | + s.update( user ); |
| 200 | + Query q = s.createQuery( "DELETE FROM " + UserData.class.getName() + " d WHERE d.user = :user" ); |
| 201 | + q.setParameter( "user", user ); |
| 202 | + q.executeUpdate(); |
| 203 | + |
| 204 | + s.getTransaction().commit(); |
| 205 | + s.clear(); |
| 206 | + |
| 207 | + assertEquals( ( (User) s.get( User.class, user.id ) ).userDatas.size(), 0 ); |
| 208 | + assertEquals( s.createQuery( "FROM " + UserData.class.getName() ).list().size(), 0 ); |
| 209 | + |
| 210 | + s.close(); |
| 211 | + } |
| 212 | + |
| 213 | + @Entity |
| 214 | + private static class User implements Serializable { |
| 215 | + @Id @GeneratedValue |
| 216 | + private Integer id; |
| 217 | + |
| 218 | + @OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL) |
| 219 | + @MapKeyColumn(name = "name", nullable = true) |
| 220 | + private Map<String, UserData> userDatas = new HashMap<String, UserData>(); |
| 221 | + } |
| 222 | + |
| 223 | + @Entity |
| 224 | + private static class UserData { |
| 225 | + @Id @GeneratedValue |
| 226 | + private Integer id; |
| 227 | + |
| 228 | + @ManyToOne |
| 229 | + @JoinColumn(name = "userId") |
| 230 | + private User user; |
| 231 | + } |
160 | 232 | }
|
0 commit comments