Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 冬眠';从5.2.12升级到休眠5.3.4后,s柱变压器停止工作_Java_Hibernate - Fatal编程技术网

Java 冬眠';从5.2.12升级到休眠5.3.4后,s柱变压器停止工作

Java 冬眠';从5.2.12升级到休眠5.3.4后,s柱变压器停止工作,java,hibernate,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

我有一个实体类,其中一个字段用@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_,
因此,在where子句中,cc.currency\u code\u id=currency\u code\u id被替换为cc.campait0.currency\u code\u id。所以,在表的别名和列名之间插入了生成的表名0。不知道是怎么发生的,也不知道该怎么解决。我确实找过了,但到目前为止什么也没找到


迁移指南中也没有提到-

最后,经过大量的调试和研究,我发现了5.*版本系列-

看起来我必须使用forColumn配置,我尝试了它,它工作起来有点奇怪。从多个组合大写字母开始工作

 @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;
如您所见,我将forColumn=“CURRENCY\u CODE\u ID”添加为大写,并将cc.CURRENCY\u CODE\u ID引用为大写,因此跳过了它。所以行为还是有点古怪,但在列表中是有效的

生成的结果是

 (SELECT
            cc.code 
        FROM
            public.currency_code AS cc 
        WHERE
            cc.CURRENCY_CODE_ID = campaign0_.currency_code_id) as currency4_33_,
这同样有效,所以看起来像是大写字母。女巫救了我

@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;