Hibernate 5.x 到 Hibernate 6.x 别名问题

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

我正在从 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 的别名生成的,这是一个语法错误,因为数据库不支持 _ 作为前缀。

java spring hibernate
1个回答
0
投票

感谢您报告此事。我已经打开了以下问题:

https://hibernate.atlassian.net/browse/HHH-16619

解决方法当然是将字段重命名为符合标准 Java 命名约定的名称。

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