org.hibernate.ObjectNotFoundException: aucune ligne avec l'identifiant donné n'existe

J'ai eu un problème depuis Hibernate 4.1.8 résultant de l'exception suivante:

org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [test.hibernate.TestPrepravkaOsobaSAdresou$Uvazek#2]

J'ai un simple OneToMany association entre deux entités:

@Entity(name = "Ppv")
@Table(name = "PPV")
public static class Ppv {

  @Id
  Long ppvId;

  @OneToMany(fetch = FetchType.EAGER, mappedBy = "ppv")
  Set<Uvazek> uvazeks = new HashSet<Uvazek>(0);
}


@Entity(name = "Uvazek")
@Table(name = "UVAZEK")
public static class Uvazek {

  @Id
  Long uvazekId;

  @ManyToOne
  @JoinColumn(name = "PPV_FXID")
  Ppv ppv;

}

et un cas de test où j'ai un Tvc et de deux Uvazek. Lorsque je charge et détacher un Ppv, de supprimer une Uvazek associé chargé de Tvc et de fusion Ppv j'obtiens une exception.

jdbcTemplate.execute("insert into PPV values(1)");
jdbcTemplate.execute("insert into UVAZEK values(2, 1)");
jdbcTemplate.execute("insert into UVAZEK values(3, 1)");

Ppv ppv = (Ppv) getSession().get(Ppv.class, 1l);
getSession().clear();

getSession().delete(getSession().get(Uvazek.class, 2l));
getSession().flush();
getSession().merge(ppv);
getSession().flush();             //Causes the exception

Pendant le Ppv de fusion, Hibernate essaie de charger le supprimé Uvazek. Même si Uvazek est supprimé, Hibernate a toujours les informations à ce sujet dans

org.hibernate.collection.internal.AbstractPersistentCollection.storedSnapshot

sur uvazek est mis sur le détachement du Ppv. Dans une version précédente (<4.1.8) cela fonctionne. Dans cet exemple simple que je puisse la réparer en ajoutant orphanRemoval=true sur uvazeks ensemble sur le Ppv et au lieu de supprimer uvazek supprimer de uvazeks mis sur la carte.

Donc ma question est: Est-ce une Hibernate bug ou une mauvaise pratique?

source d'informationauteur user3206615