Hallo,
ich steh ziemlich auf'm Schlauch. In der Datenbank steht alles korrekt, wenn ich Breakpoints setze und mir das anschau. Der Test gibt allerdings völlig andere Werte aus.
{edit}
DB: MySQL;
EclipseLink mit JPA.
{/edit}
Ich hab ein Fahrzeug, dem Protokolleinträge zugeordnet werden können. Das sieht so aus (Methode in der Fahrzeug-Klasse):
Jetzt hab ich 2 Tests geschrieben, um das ganze zu testen. Nach jedem Test wird die DB einmal
testA flutscht ohne Probleme, bei testB schlägt die Assertion "assertEquals(1, all.size());" fehlt:
"java.lang.AssertionError: expected:<1> but was:<3>"
Wenn ich rein-debugge, seh ich in der Liste "all" die Einträge "Test 3", "Test 2" und "Test 1". In der DB sind die aber nicht mehr, sondern nur der "Test 3" (was ja auch so korrekt ist). Wo ist das Problem****
Danke schon mal für eure Hilfe!
ich steh ziemlich auf'm Schlauch. In der Datenbank steht alles korrekt, wenn ich Breakpoints setze und mir das anschau. Der Test gibt allerdings völlig andere Werte aus.
{edit}
DB: MySQL;
EclipseLink mit JPA.
{/edit}
Ich hab ein Fahrzeug, dem Protokolleinträge zugeordnet werden können. Das sieht so aus (Methode in der Fahrzeug-Klasse):
Code:
@OneToMany(mappedBy = "fahrzeug", cascade={CascadeType.MERGE, CascadeType.PERSIST})
private Set<Fahrzeugprotokoll> fahrzeugprotokolle;
public void addProtokolleintrag(Typ statusTyp, String bemerkung) {
Fahrzeugprotokoll prot = new Fahrzeugprotokoll(statusTyp, bemerkung, this, this.einsatz);
fahrzeugprotokolle.add(prot);
}
Jetzt hab ich 2 Tests geschrieben, um das ganze zu testen. Nach jedem Test wird die DB einmal
Code:
@After // löschen nach jedem Test
public void testShutdown() {
EntityManager em = HibernateUtil.getEntityManager();
Fahrzeug f = vehicleService.findFahrzeugByRufname(RUFNAME_TESTFAHRZEUG);
em.getTransaction().begin();
Query q = em.createQuery("DELETE FROM Fahrzeugprotokoll WHERE fahrzeug = :fahrzeug", Fahrzeugprotokoll.class);
q.setParameter("fahrzeug", f);
int res = q.executeUpdate();
em.getTransaction().commit();
em.close();
}
@Test
public void testA() {
Fahrzeug f = vehicleService.findFahrzeugByRufname(RUFNAME_TESTFAHRZEUG);
assertTrue(f != null);
EntityManager em = HibernateUtil.getEntityManager();
em.getTransaction().begin();
f.addProtokolleintrag(Typ.Manuell, "Test 1");
f.addProtokolleintrag(Typ.Manuell, "Test 2");
em.merge(f);
em.getTransaction().commit();
f = vehicleService.findFahrzeugByRufname(RUFNAME_TESTFAHRZEUG);
assertEquals(2, f.getFahrzeugprotokolle().size());
assertNotNull(f);
}
@Test
public void testB() {
Fahrzeug f = vehicleService.findFahrzeugByRufname(RUFNAME_TESTFAHRZEUG);
EntityManager em = HibernateUtil.getEntityManager();
em.getTransaction().begin();
f.addProtokolleintrag(Typ.Manuell, "Test 3");
em.merge(f);
em.getTransaction().commit();
f = vehicleService.findFahrzeugByRufname(RUFNAME_TESTFAHRZEUG);
List<Object> all = Arrays.asList(f.getFahrzeugprotokolle().toArray());
assertEquals(1, all.size());
}
testA flutscht ohne Probleme, bei testB schlägt die Assertion "assertEquals(1, all.size());" fehlt:
"java.lang.AssertionError: expected:<1> but was:<3>"
Wenn ich rein-debugge, seh ich in der Liste "all" die Einträge "Test 3", "Test 2" und "Test 1". In der DB sind die aber nicht mehr, sondern nur der "Test 3" (was ja auch so korrekt ist). Wo ist das Problem****
Danke schon mal für eure Hilfe!
Zuletzt bearbeitet: