java - hibernate注释一对多与复合外键

标签 java hibernate orm annotations

我在 hibernate 注释映射方面遇到了很大的问题。这是我的图表:

diagram

对于映射对象,很少有简单的,因为它的 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;
}

关于java - hibernate注释一对多与复合外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11504254/

相关文章:

java - 调用 entityManager.getTransaction() 时出现 EJBException

java - Hibernate ManyToMany 只持久化

java - 自定义规则的 SonarQube API 文档

将实现的类分配给接口(interface)时出现Java Reflection NoSuchMethod异常

java - 如何使用 Hibernate Criteria 在 Postgresql JSON 中进行搜索并与 Lateral 一起使用

node.js - Sequelize.js - 如何正确使用关联的 get 方法(每次调用都没有 sql 查询)?

.net - 多 ORM 解决方案

java - web项目的eclipse-lib问题

java - 在 SonarQube 中使用 Spring 构造函数注入(inject)

java - 如何在 Play Framework 中使用 Ebean 比较日期?