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

时间:2019-04-24 16:10:47

标签: java hibernate jpa

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

@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 完美配合,但是一旦我进入 hibernate 4 ,我就会发现一些异常。

在休眠5中,只有引用其他类的某些ID(PK)的列才出现此问题。但是,在休眠4中,对于非pk列,我也会看到此错误。

对于引用非主键的列,我开始遇到相同的错误。

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

以上代码在休眠4

中给了我错误
Column with logical name AB not found in entity class. 

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

是纯粹出于休眠版本还是出于其他原因?

引荐如下:Similar Issue

1 个答案:

答案 0 :(得分:2)

对于休眠4.1.7,有一个bug

此问题的解决方法是在列名周围加上重音符号。

  

无法找到逻辑名称为“ id”的列   org.hibernate.mapping.Table(template)及其相关的超表和   辅助表

     

@ManyToOne @JoinColumnsOrFormulas({@ JoinColumnOrFormula(column =   @JoinColumn(name =“ template”,referencedColumnName =“ id”)),
  @JoinColumnOrFormula(formula = @JoinFormula(value =“'custom'”,   referencedColumnName =“ type”))})这是由于标识了   的logicalToPhysical映射内的列名称   TableColumnNameBinding。在此映射中,列名称为   被重音符号(`id`)包围,而支票则对   映射具有纯列名称(id)。

     

此问题的解决方法是将列名与   口音。

     

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