gpt4 book ai didi

java - Hibernate列同时用作复合主键的一部分和复合外键的一部分

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

我得到了这个不允许更改的表结构,并且我在寻找 Hibernate 映射解决方案时遇到了问题。

表A

a1 (pk)
a2
<小时/>

表B

b1 (pk, fk on 'A.a1')
b2 (pk)
b3
<小时/>

表C

c1 (pk, fk on 'B.b1')
c2 (pk, fk on 'B.b2')
c3 (pk)
c4
<小时/>

表D

d1 (pk)
d2 (pk, fk on 'A.a1')
d3 (fk on 'C.c2')
d4 (fk on 'C.c3')
d5
<小时/>

现在我遇到的问题是表 D 的列 d2 的 b 级别,它是复合键的一部分,也是表 C 上外键的一部分

在 Hibernate 中我这样做了

@Embeddable
public class TableDId {
private Long d1;
private TableA d2;

@Column(name="d1")
public Long getD1() {
return this.d1;
}

@ManyToOne
@JoinColumn(name="d2")
public Long getD2() {
return this.d2;
}
// Setters
}


@Entity
public class TableD {
private TableDId id;
private TableC tableC;

@EmbeddedId @GeneratedValue(strategy = GenerationType.AUTO)
public TableDId getId() {
return this.id;
}

@ManyToOne
@JoinColumns({
@JoinColumn(name="id.d2", referencedColumnName="c1"),
@JoinColumn(name="d3", referencedColumnName="c2"),
@JoinColumn(name="d4", referencedColumnName="c3")
})
public TableC getTableC() {
return tableC;
}

// Setters
}

正如您所猜测的那样,这不起作用,我在保存新的 TableD 时遇到了 Hibernate 错误

java.sql.BatchUpdateException: Unknown column 'id.d2' in 'field list'

任何人都可以提出可行的解决方案吗?

非常感谢。

最佳答案

@JoinColumn(name="id.d2", referencedColumnName="c1")

尝试删除 ID。来自映射

@JoinColumn(name="d2", referencedColumnName="c1")

示例 http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html (第2.2.6节)

关于java - Hibernate列同时用作复合主键的一部分和复合外键的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6841815/

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