に、私は追加のデータとの交差テーブルを追加していると私はを使用するには、このテーブル内のレコードに拘束されたエンティティのための複雑なIDを作るためにを@EmbeddedId(entity1とentity2)。@EmbeddedId内のカスケードが休止状態
Entity1ToEntity2Linkで@OneToMany(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH},
fetch = FetchType.LAZY, mappedBy = "id.entity1")
private List<Entity1ToEntity2Link> links = new ArrayList<>();
私は@EmbeddedIdを持っており、その中で、私はへのリンクを持っている:
は私がそうエンティティ1を保存するときに、カスケードを経由して、すべてのデータを保存したい、それが実体1で私が持っている理由であります両方のエンティティ。しかし、私はそうエンティティ1を保存するときに、第2の1を保存することにしたい、私はこのようにそれを作った:
@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private Entity2 entity2;
しかし、生憎、私は@EmbeddedIdの内側に持っているカスケードは無視しているようです。私は、挿入のためにそのSQLが生成されていない見ることができるとEntity1ToEntity2Linkが保存されるとき、私はエラーを取得する:
violated - parent key not found
私は@EmbeddedIdのカスケードをサポートしていないと思われます。確信はないけど。 Entity1ToEntity2Linkが保存される前にentity2をどのように保存できるか考えていますか?
IDオブジェクト:
@Embeddable
public class LinkId extends AbstractLinkId {
//...
@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private Entity2 entity2;
//...
}
@MappedSuperclass
public class AbstractLinkId {
//...
@ManyToOne
private Entity1 entity1;
//...
}
あなたの2番目の解決策が私のために働きます。私は自動生成されたIDを追加し、古いIDを@埋め込みオブジェクトとして作成します。しかし、なぜ@ EmbeddedIdがカスケードセービングをサポートしていないのはなぜですか?それは文書化されていますか? – dvelopp