我正在从 spring boot 2.7(hibernate 5.x) 迁移到 spring boot 3.0(hibernate 6.x)。 我的数据库是 Oracle 19c,我正在使用 OracleDialect。
问题是我们遗留代码中的一些实体将下划线作为 jpa 实体字段的前缀。 发生的事情是较新版本的 hibernate 在生成的查询前加上下划线前缀,这是一个语法错误,它过去在旧版本中工作正常但在 hibernate 6.x 中不起作用,我们现在无法重命名字段名称。
我的实体看起来像这样:
@Entity("Tree")
@Table("TREE")
class Tree {
@Id
@Column("id")
int id;
@Column("PARENT_NODE_ID")
int parentId;
@ManyToOne(cascade={CascadeType.ALL}, fetch = FetchType.EAGER)
@JoinColumn(name="PARENT_NODE_ID", insertable = false, updatable = false)
private Tree _parent;
}
在这种情况下,生成的查询将如下所示:
select blah blah from TREE t inner join TREE _1_a on t.PARENT_NODE_ID = _1_a.ID
在这里您可以注意到“_1_a”是如何作为表 TREE 的别名生成的,这是一个语法错误,因为数据库不支持 _ 作为前缀。
感谢您报告此事。我已经打开了以下问题:
https://hibernate.atlassian.net/browse/HHH-16619
解决方法当然是将字段重命名为符合标准 Java 命名约定的名称。