gpt4 book ai didi

java - 使用@IdClass 复合主键时如何命名@ForeignKey?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:20 25 4
gpt4 key购买 nike

@Entity
@IdClass(MyPK.class)
public class SubEntity {
@Id private int id;
@Id private String name;
}

@Entity
public class ParentEntity {
@OneToOne(cascade = ALL)
@JoinColumn(name="fk_sub_id", foreignKey = @ForeignKey(name="fk_sub"))
private SubEntity sub;
}

原因:org.hibernate.AnnotationException:从 ParentEntity 引用 SubEntity 的外键具有错误的列数。应该是2

由于 @JoinColumn 注释,此操作失败。但是复合PK要怎么写呢?我必须在 hibernate 自动生成期间使用此注释设置外键约束名称。

最佳答案

对于复合键,你应该使用@JoinColumns

@JoinColumns(value = {
@JoinColumn(name = "fk_sub_id", referencedColumnName = "id"),
@JoinColumn(name = "fk_name", referencedColumnName = "name")},
foreignKey = @ForeignKey(name = "fk_sub"))

更新:

在这种情况下,Hibernate 似乎没有遵循 JPA 2.1 规范。您需要另外包括 hibernate 自己的注释,该注释已被弃用但仍然有效。这应该像这样添加:

@JoinColumns(value = {
@JoinColumn(name = "fk_sub_id", referencedColumnName = "id"),
@JoinColumn(name = "fk_name", referencedColumnName = "name")},
foreignKey = @ForeignKey(name = "fk_sub"))
@org.hibernate.annotations.ForeignKey(name = "fk_sub")

关于java - 使用@IdClass 复合主键时如何命名@ForeignKey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32047076/

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