我有实体类,其中一个字段用 @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
答案 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_,