ich zwei JPA-Entitäten wie dieses:JPA Kaskade Persistenz mit Entität ElementCollection Schlüssel
@Entity
class Foo {
@Id
private long id;
// ...
}
@Entity
class Bar {
@ElementCollection(targetClass = String.class, fetch = FetchType.LAZY)
@MapKeyJoinColumn(name = "foo_id", referencedColumnName = "id")
@MapKeyClass(Foo.class)
@Column(name = "content")
@CollectionTable(name = "bar_foo_content",
joinColumns = @JoinColumn(name = "bar_id", referencedColumnName = "id"))
@ManyToMany(cascade = CascadeType.ALL)
private Map<Foo, String> fooContent = Maps.newHashMap();
// ...
}
Wie Sie sehen können, das fooContent
Feld bildet eine many-to-many-Beziehung zwischen Bar
und Foo
, so dachte ich, es wäre angebracht, @ManyToMany
zu verwenden, um für das Feld Kaskadierung anzugeben. Wenn jedoch ein Bar
mit ein paar Foo → String
Werte in der Karte zu bestehen versucht, erhalte ich die folgende Ausnahme:
javax.persistence.RollbackException: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: <<instance of Foo>>
Offensichtlich hat Eclipse nicht die Ausdauer meiner Foo
Instanzen kaskadieren. Wie sollte ich fooContent
annotieren, um kaskadierte Persistenzen zu erhalten?
Wie sieht dein 'Foo' aus? Die Ausnahme sieht aus wie ein Problem zwischen 'Foo' und einer anderen Entität. – Uooo
@Uooo der Fehler passiert immer noch mit dem genauen Code oben (d. H. Keine Felder mehr in Foo) – dflemstr
Ich habe das gleiche Problem. Haben Sie schon eine Lösung gefunden? – drame