2

我对休眠注释映射有很大的问题。这是我的图表:

图表

至于映射对象,很少有人简单,因为它的 1...N 为:
TASK_DEF -> REPORT_DATA
REPORT_DATA -> REPORT_DATA_COLUMN
REPORT_DATA -> REPORT_DATA_VALUE
对吗?

现在的问题是当我尝试将 Collection 映射REPORT_DATA_VALUEREPORT_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选择了错误的标识,因此无法执行查询。有人可以帮我解决这个问题吗?

4

1 回答 1

2

你的代码有问题。试试这个:

@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-16T12:48:07.303 回答