我在实体类的列上有以下注释。
@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
答案 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`”))})