升级到从5.2.12休眠5.3.4后,Hibernate的ColumnTransformer停止工作

时间:2018-08-07 16:52:37

标签: java hibernate

我有实体类,其中一个字段用 @ColumnTransformer

注释
@NotNull
@Column(name = "CURRENCY_CODE_ID")
@ColumnTransformer(
   read = "(SELECT cc.code FROM currency_code AS cc WHERE cc.currency_code_id = currency_code_id)",
   write = "(COALESCE((SELECT cc.currency_code_id FROM currency_code AS cc WHERE cc.code = ?),0))")
public String currency;

在hibernate 5.2.12中它可以正常工作,但是在升级到Hibernate 5.3.4.Final后,它突然坏了,并且我正在生成以下查询

campaign0_.campaign_group_id as campaign3_33_,
(SELECT cc.code FROM public.currency_code AS cc 
    WHERE cc.campaign0_.currency_code_id = campaign0_.currency_code_id) as currency4_33_,
campaign0_.date_created as date_cre5_33_,

因此,在子句中 cc.currency_code_id = currency_code_id 被替换为 cc.campaign0_.currency_code_id 。因此,基本上将生成的表名campaign0_注入到表的别名和列名之间。不知道它是怎么发生的,什么解决方法。我确实进行了搜索,但到目前为止没有找到任何内容。

迁移指南中也没有提及-https://github.com/hibernate/hibernate-orm/blob/5.3/migration-guide.adoc

1 个答案:

答案 0 :(得分:3)

最后,经过大量调试和研究,我发现了针对5. *版本系列-https://hibernate.atlassian.net/browse/HHH-8944?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel

的此错误。

看起来我必须使用forColumn配置,我尝试了一下,但是它工作得有点奇怪。从多个大写字母组合而成

.v-navigation-drawer--close.v-navigation-drawer--temporary {
    transform: translateX(-13vw) !important;
}

您可以看到我以大写形式添加了forColumn =“ CURRENCY_CODE_ID”,并以大写形式引用了cc.CURRENCY_CODE_ID,因此它跳过了它。因此,行为仍然不算时髦,但在列表上起作用了,

生成的结果是

 @NotNull
    @Column(name = "CURRENCY_CODE_ID")
    @ColumnTransformer(
            forColumn = "CURRENCY_CODE_ID",
            read = "(SELECT cc.code FROM currency_code AS cc WHERE cc.CURRENCY_CODE_ID = currency_code_id)",
            write = "(COALESCE((SELECT cc.currency_code_id FROM currency_code AS cc WHERE cc.code = ?),0))")
    public String currency;

这也很有效,因此看起来像是大写字母。巫婆救了我

 (SELECT
            cc.code 
        FROM
            public.currency_code AS cc 
        WHERE
            cc.CURRENCY_CODE_ID = campaign0_.currency_code_id) as currency4_33_,