我得到了以下两个实体:
@javax.persistence.Entity
public class Book {
@javax.persistence.EmbeddedId
private BookPK id;
private String title;
@javax.persistence.ManyToOne(fetch = javax.persistence.FetchType.LAZY)
@javax.persistence.JoinColumns({
@javax.persistence.JoinColumn(name = "LNGCOD", referencedColumnName = "LNGCOD"),
@javax.persistence.JoinColumn(name = "LIBCOD", referencedColumnName = "LIBCOD") })
private Language language;
}
@javax.persistence.Entity
public class Language {
@javax.persistence.EmbeddedId
private LanguagePK id;
private String name;
}
具有组成的PK:
@Embeddable
public class BookPK implements Serializable {
private Integer bookcod;
private Integer libcod;
}
@Embeddable
public class LanguagePK implements Serializable {
private Integer lngcod;
private Integer libcod;
}
如果我尝试创建一个新Book并将其保留下来,则会出现一个异常,告诉我在插入语句中两次发现libcod(“列'libcod'指定了两次”)。但是在定义JoinColumn时不能使用“ insertable = false”(“不允许在属性中混合可插入和不可插入的列”)。
有什么方法可以定义这些对象+关系,以便由Hibernate自动管理列? (我特别想到libcod)。
谢谢。
最佳答案
创建第三个属性“ Integer libcod;”在书上。让该属性管理libcod的db状态。对语言连接中的两个属性都使用insertable = false,updatable = false。在您的“ setLanguage”中,设置私有libcod = language.libcod。不要公开私有libcod的getter / setter。
插入时是否生成任何值?我想这会使事情变得更加复杂。