Skip to content

Commit 041cbe6

Browse files
emmanuelbernardNaros
authored andcommitted
[ogm/hiking] Fix database clearing error by executing removal in proper order
1 parent 38621bf commit 041cbe6

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

hibernate-ogm/hiking-demo/src/main/java/org/hibernate/ogm/hiking/rest/AdminResource.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public AdminResource() {
4949
@Path("/populate")
5050
public void populate() throws Exception {
5151
clearDatabase(businessEm);
52-
clearDatabase(hikeEm);
52+
clearHikeAndTrips(hikeEm);
5353

5454
Trip corsica = new Trip();
5555
corsica.name = "Corsica from north to south";
@@ -99,6 +99,19 @@ public void populate() throws Exception {
9999
hikeEm.persist( semiMarathon );
100100
}
101101

102+
private void clearHikeAndTrips(EntityManager em) {
103+
List<?> all = em.createQuery( "from Hike" ).getResultList();
104+
for ( Hike object : (List<Hike>) all ) {
105+
object.recommendedTrip = null;
106+
em.remove( object );
107+
}
108+
109+
all = em.createQuery( "from Trip" ).getResultList();
110+
for ( Object object : all ) {
111+
em.remove( object );
112+
}
113+
}
114+
102115
private void clearDatabase(EntityManager em) {
103116
List<Object> all = em.createQuery( "from java.lang.Object" ).getResultList();
104117
for ( Object object : all ) {

hibernate-ogm/hiking-demo/src/test/java/org/hibernate/ogm/hiking/HikeTest.java

+39
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.hibernate.ogm.hiking;
22

3+
import java.util.List;
4+
35
import static org.fest.assertions.Assertions.assertThat;
46

57
import javax.persistence.EntityManager;
68
import javax.persistence.EntityManagerFactory;
9+
import javax.persistence.EntityTransaction;
710
import javax.persistence.Persistence;
811

912
import org.hibernate.ogm.hiking.model.Hike;
@@ -107,4 +110,40 @@ public void validationTest() {
107110
entityManager.getTransaction().commit();
108111

109112
}
113+
114+
@Test
115+
public void testClearDatabase() {
116+
EntityTransaction transaction = entityManager.getTransaction();
117+
transaction.begin();
118+
119+
Hike hike = new Hike( "San Francisco", "Oakland" );
120+
Trip trip = new Trip();
121+
trip.name = "Nappa Valley Unit Test";
122+
123+
hike.recommendedTrip = trip;
124+
trip.availableHikes.add( hike );
125+
126+
entityManager.persist( trip );
127+
entityManager.persist( hike );
128+
129+
transaction.commit();
130+
131+
entityManager.clear();
132+
133+
transaction = entityManager.getTransaction();
134+
transaction.begin();
135+
136+
List<?> all = entityManager.createQuery( "from Hike" ).getResultList();
137+
for ( Hike object : (List<Hike>) all ) {
138+
object.recommendedTrip = null;
139+
entityManager.remove( object );
140+
}
141+
142+
all = entityManager.createQuery( "from Trip" ).getResultList();
143+
for ( Object object : all ) {
144+
entityManager.remove( object );
145+
}
146+
147+
transaction.commit();
148+
}
110149
}

0 commit comments

Comments
 (0)