【问题标题】:hibernate annotations one to many with composite foreign key使用复合外键一对多休眠注释
【发布时间】:2012-07-15 07:08:23
【问题描述】:

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

至于映射对象,很少有简单的,因为它的 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选择了错误的标识,因此无法执行查询。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 在您的问题中包含图表,并粘贴异常的完整堆栈跟踪。

标签: java hibernate orm annotations


【解决方案1】:

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

@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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多