これは私のモデル冗長コラム - 複合IDへのマッピングが1対1
@Entity
public class Picture {
@EmbeddedId
private PictureId id;
...
}
@Embeddable
public class PictureId implements Serializable {
private static final long serialVersionUID = -8285116986358642545L;
@Column(nullable = false, name = "GALLERY_ID") private long galleryId;
@Column(nullable = false, name = "AUTHOR_ID") private long authorId;
@Column(nullable = false, name = "ORDINAL_NUMBER") private int ordinalNumber;
...
}
@Entity
public class Gallery {
@Id
@GeneratedValue
private long id;
private String name;
@OneToOne
@JoinColumns({
@JoinColumn(name = "REDUNDANT_GALLERY_ID", referencedColumnName = "GALLERY_ID"),
@JoinColumn(name = "COVER_AUTHOR_ID", referencedColumnName = "AUTHOR_ID"),
@JoinColumn(name = "COVER_ORDINAL_NUMBER", referencedColumnName = "ORDINAL_NUMBER")
})
private Picture cover;
...
}
である私はここ@JoinColums
をspecifingする必要はないと思いますが、私はそれがより明確にしたかったです。このモデルでは、ID
の値を反映する私のGALLERY
テーブルに冗長列が作成されています。私はこのコラムを取り除きたい。フィールドcover
はnullでもかまいません。
このことについてたくさん考えた後、私はこのマッピングを外部テーブルに移す方がよいと決めました。明らかにそれは私の問題を解決しなかったし、それはさらに複雑になる。
@Entity
public class Gallery {
@OneToOne
@JoinTable(name = "GALLERY_COVER",
joinColumns = {
@JoinColumn(name = "GALLERY_ID", referencedColumnName = "ID")
},
inverseJoinColumns = {
@JoinColumn(name = "REDUNDANT_GALLERY_ID", referencedColumnName = "GALLERY_ID"),
@JoinColumn(name = "AUTHOR_ID", referencedColumnName = "AUTHOR_ID"),
@JoinColumn(name = "ORDINAL_NUMBER", referencedColumnName = "ORDINAL_NUMBER")
})
private Picture cover;
}
私は@AssociationOverride
と@AttributeOverride
を使用しようとしていたが、私は失敗しました。これらのマッピングで私を助けることができますか?
編集:ここではrepositoryは
「冗長」結合列には読み取り専用のマークを付けることができます: '@JoinColumn(name =" ID "、referencedColumnName =" GALLERY_ID "、insertable = false、updatable = false)' –
残念ながら、それ。これは、 '' 'プロパティの挿入可能なカラムと挿入不可能なカラムを混在させることが許されない' 'というメッセージです。 – Sebastian
' 'Gallery''の主キーを' 'Picture''への外部キーの一部として再利用すると、複合主キーには問題があります。データモデルでは、 'Gallery'の' cover'が同じ 'Gallery'の写真の1つであることを要求する明示的なものは何もありません。 'カバー' 'ピクチャ'がプライマリキーに異なる 'ギャラリー' IDを持つ可能性は全くあります。この場合、「冗長な」「ギャラリー」IDは実際には冗長ではない。 –