【发布时间】:2011-07-27 09:02:15
【问题描述】:
我得到了这个不允许更改的表结构,我在寻找 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 的 column 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'
谁能提出一个可行的解决方案?
非常感谢。
【问题讨论】:
标签: java hibernate hibernate-mapping