0
エンベデッドオブジェクトがエンティティへのOneToOne
の関係を定義している場合。 Embeddableオブジェクトを使用するEntityは、その関係の列名をどのように上書きできますか。埋め込みオブジェクトを使用した外部キー列名のオーバーライド
使用して、次のエンティティ:
@Entity
public class User {
@Id
private int id;
@Embedded
private CubeLocation cubeLocation;
}
@Embeddable
public class CubeLocation {
@OneToOne
private MailBox mailBox;
// .. other non-relevant fields
}
@Entity
public class MailBox {
@Id
private String name;
private String cell;
}
Userエンティティのためのデータベーステーブルが列IDとMAILBOX_NAMEを持っているでしょう。データベース列の名前はどのようにMAILBOX_NAMEからMBX_IDに変更できますか?
私はUser
エンティティにAssociationOverride
注釈を定義しようとしましたが、私は、その場合には、このエラーを取得しています:
@Entity
@AssociationOverride(
name="cubeLocation.mailBox",
[email protected](name="MBX_ID"))
public class User {
}
エラー:
org.hibernate.AnnotationException: Illegal attempt to define a @JoinColumn with a mappedBy association: cubeLocation.mailBox
私はあなたのソリューションを試しましたが、私はまだ同じe rror: 'org.hibernate.AnnotationException:mappedByの関連付けを持つ@JoinColumnを定義しようとする不正な試み:cubeLocation.mailBox' –
うまくいくはずです。私は一時的にオーバーライドを削除し、単に '@JoinColumn(name =" MBX_ID ")'を '@ OneToOne'自体に追加しようとします。その結果は、問題がオーバーライドまたは他のマッピングであるかどうかを示すはずです。 –
'@ JoinColumn'を' @ OneToOne'itに正しく追加すれば(しかしこれは、組み込みオブジェクトを使って他のすべてのエンティティの名前を変更します)。 '@ JoinColumn'を' @ OneToOne'に、 '@ AssociationOverride'をエンティティに追加すると、正しく動作します。しかし、 '@AnnotToOne'の' @ JoinColumn'を設定せずに '@ AssociationOverride'をエンティティに追加すると、' mappedBy associationで@JoinColumnを定義しようとする不正な試み 'エラーが発生します。エンティティで '@ AssociationOverride'を設定できるようにするために、埋め込みで' @ JoinColumn'を設定する必要があるのはなぜですか? –