Ich habe zwei Entitätsklassen Organisation und Benutzer mit einem one to many Beziehung (Groovy-Code für Einfachheit!):Frühling JPA: Einfügen eines neuen Entity und Cascade freistehende Referenz
@Entity
class Organisation {
@Id Long id
String name
@OneToMany
List<User> users
}
@Entity
class User {
@Id Long id
String username
@ManyToOne(optional=false, cascade = CascadeType.Persist)
Organisation organisation
}
Wenn ich einen neuen Benutzer erstellen mit einer neuen Organisation funktioniert alles einwandfrei:
def user = new User(organisation: new Organisation(...))
Aber wenn ich eine bestehende Organisation nehmen, stellen sie es auf die Organisation Attribut auf einen neuen Benutzer ich eine Fehlermeldung erhalten:
def user = new User(organisation: organisationRepository.findOne(orgId))
userRepo.save(user)
bewirkt:
org.hibernate.PersistentObjectException: detached entity passed to persist: Organisation
Ich weiß, dass ein beharren auf einer frei stehende Einheit nicht aufrufen kann. Aber in diesem Fall, da ich selbst nichts über die Organisation Einheit ändern, dachte ich Hibernate würde es erlauben.
Ich habe versucht, cascade = {CascadeType.Persist, CascadeType.Merge}
in die ManyToOne Annotation, aber das endet in dem gleichen Fehler.
Ist das, was ich mit Hibernate nicht möglich archivieren möchten, oder muss ich irgendwo einen Denkfehler haben?
Mögliche doppelte von [JPA/Hibernate: freistehende Einheit übergeben beharren] (http://stackoverflow.com/questions/13370221/jpa-hibernate-detached-entity-passed-to-persist) – agilob
Sie müssen Datenbankrelation in eine bessere Art und Weise verwalten, erfahren Sie mehr hier https://stackoverflow.com/questions/13370221/jpa-hibernate-detached-entity-passed-to-persist – agilob