休眠注释与复合外键一对多
问题描述:
我对hibernate注释映射有相当大的问题。我的继承人图:休眠注释与复合外键一对多
diagram http://s13.postimage.org/vdye6yc8n/image.jpg
至于映射对象,一些很简单的原因1,...,N为:TASK_DEF -> REPORT_DATA
REPORT_DATA -> REPORT_DATA_COLUMN
REPORT_DATA -> REPORT_DATA_VALUE
吧?
现在的问题是,当我试图将REPORT_DATA_VALUE
集合映射到REPORT_DATA_COLUMN
。我试过这种方式:
@OneToMany(fetch = FetchType.LAZY)
@ForeignKey(name = "FK_REPORT_DATA_VALUE_REPORT_DA", inverseName = "PK_REPORT_DATA_COLUMN")
@JoinTable(name = "REPORT_DATA_VALUE", joinColumns = {
@JoinColumn(name = "REPORT_DATA_ID"),
@JoinColumn(name = "COLUMN_NM")
}, inverseJoinColumns = {
@JoinColumn(name = "REPORT_DATA_ID"),
@JoinColumn(name = "COLUMN_NM")
})
List<ReportDataValue> reportDataValueList;
但hibernate选择错误的标识,因此无法执行查询。有人可以帮助我吗?
答
代码存在问题。试试这个:
@OneToMany(fetch = FetchType.LAZY)
@JoinTable(name = "REPORT_DATA_VALUE", joinColumns = {
@JoinColumn(name = "REPORT_DATA_ID"),
}, inverseJoinColumns = {
@JoinColumn(name = "COLUMN_NM")
})
List<ReportDataValue> reportDataValueList;
顺便说一句,如果我是你,我不会对一对多创建一个表。我会这样做:
public class A{
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="B_ID")
B b;
}
public class B{
@OneToMany(mappedBy="b",fetch=FetchType.EAGER)
Set<A> as;
}
在您的问题中包括该图,并粘贴异常的完整堆栈跟踪。 – 2012-07-16 12:47:33
对不起,图更新了! – kamil 2012-07-16 13:14:40