2017-09-19 6 views
1

を持続していない私は2つのエンティティ(以下簡易版)持っている:私は、メッセージを持続しようとするとJPA 2.0 - 埋め込まれたID、manytoone

@Entity 
Client 
@Id protected String id; 

@OneToMany(mappedBy = "sender", cascade = CascadeType.ALL) 
protected List<Message> sentMessages = new ArrayList<>(); 

@Embeddable 
MessagePK 
@ManyToOne(/*cascade = CascadeType.ALL*/) 
protected Client sender; 
protected LocalDate dateTime; 

@Entity 
Message 
@EmbeddedId protected MessagePK id; 
@Column protected String message; 

を、それは、クライアントが一時的なインスタンスであることを不平を言います。

私はそこでカスケード操作を試みましたが、それも機能しませんでした(現在コメントされています)。

私はそれを把握できないようです。

答えて

2

@Embeddableに(@ManyToOneのような)関係を設定することはできません。 埋め込み可能なオブジェクトは独自のアイデンティティー(主キーの欠如)がないため、カプセル化するエンティティの一部としてのみ扱う必要があります。データベースの観点から、埋め込みオブジェクトは、残りのエンティティ属性と共に単一の行に格納されます。

あなたはあなたの複合キーの送信者/日時 参照を作成するために@IdClass注釈を使用することができます。https://wiki.eclipse.org/EclipseLink/Examples/JPA/2.0/DerivedIdentifiers

+0

しかし、それは私が@EmbeddedIdを使用していますので、この場合には識別できないのですか?そうでない場合、EmbeddedIdのポイントは何か – Walter

+0

@EmbeddedId埋め込み可能なクラスである複合主キーを示すために、エンティティクラスまたはマップされたスーパークラスの永続フィールドまたはプロパティに適用されます。埋め込み可能なクラスには埋め込み可能なものとして注釈を付ける必要があります。 –

+0

ありがとう - 私は@IdClassを見て、それがおそらく行くべき方向だと考え始めました。 – Walter

関連する問題