gpt4 book ai didi

java - JPA - 使用复合 PK 和 FK 并定义关系

转载 作者:行者123 更新时间:2023-12-01 15:41:24 25 4
gpt4 key购买 nike

我得到了这 2 个实体:

@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;
}

如果我尝试创建一本新书并保留它,我会收到一个异常,告诉我 libcod 在插入语句中找到了两次(“列 'libcod' 指定了两次”)。但在定义 JoinColumn 时我不能使用“insertable = false”(“不允许在属性中混合可插入列和不可插入列”)。

有没有办法定义这些对象+关系,以便 Hibernate 自动管理这些列? (我特别想到 libcod)。

谢谢。

最佳答案

创建第三个属性“Integer libcod;”在书上。让该属性管理 libcod 的数据库状态。对连接到 Language 的两个属性使用 insertable=false,updatable=false。在你的“setLanguage”中设置私有(private)libcod = language.libcod。不要公开私有(private) libcod 的 getter/setter。

插入时是否生成任何值?我想这可能会让事情变得更加复杂。

关于java - JPA - 使用复合 PK 和 FK 并定义关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7995681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com