@JoinColumn在Hibernate 4中给出错误“找不到逻辑名称ID的列”

问题描述 投票:0回答:1

我在我的实体类中的列上有注释。

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "INQUIRYID", referencedColumnName="ID", updatable=false, insertable=false)
private MyTable myInquiry; 

它在运行时给出了以下错误。

column with logical name ID not found in entity class

由于引用的列是主键,我删除了referencedColumnName属性并更新到下面

 @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "INQUIRYID", updatable=false, insertable=false)
    private MyTable myInquiry;

这与Hibernate 5.3完美配合,但是一旦我进入休眠4,我就会看到一些异常现象。

在hibernate 5中,我只能使用引用另一个类的某个ID(PK)的列来解决此问题。但是,在hibernate 4中,我也看到了非pk列的这个错误。

我开始为引用非主键的列获得相同的错误。

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "AB", referencedColumnName = "AB")
private MyTable someData;

上面的代码给出了hibernate 4中的错误

Column with logical name AB not found in entity class. 

这里,AB是非主键列。因此我无法删除referencedColumnName属性。

这纯粹是因为hibernate版本还是存在这种行为的不同原因?

提到这个:Similar Issue

java hibernate jpa
1个回答
2
投票

休眠4.1.7有一个bug

此问题的解决方法是使用给定的重音包围列名称。

无法找到具有逻辑名称的列:org.hibernate.mapping.Table(template)中的id及其相关的supertables和secondary tables

@ManyToOne @JoinColumnsOrFormulas({@ JoinColumnOrFormula(column = @JoinColumn(name =“template”,referencedColumnName =“id”)), @JoinColumnOrFormula(formula = @JoinFormula(value =“'custom'”,referencedColumnName =“type”))})这是通过识别TableColumnNameBinding的logicalToPhysical映射中的列名引起的。在此映射中,列名称由严重重音符(`id`)包围,而检查使用普通列名称(id)查找映射。

此问题的解决方法是使用给定的重音包围列名称。

@ManyToOne @JoinColumnsOrFormulas({@ JoinColumnOrFormula(column = @JoinColumn(name =“template”,referencedColumnName =“`id`”)), @JoinColumnOrFormula(formula = @JoinFormula(value =“'custom'”,referencedColumnName =“`type`”))})

© www.soinside.com 2019 - 2024. All rights reserved.