首页 > 解决方案 > @ColumnTransformer 选择列时没有别名

问题描述

我需要加密和解密一些这样的列。

@Entity
@Table(name = "Person")
@Data
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", unique = true, nullable = false)
    private Long id;

    @Column(name = "NAME", columnDefinition = "varchar")
    @ColumnTransformer(read = "pgp_sym_decrypt(decode(NAME, 'hex'), 'key')", write = "encode(pgp_sym_encrypt(?, 'key'), 'hex')")
    private String name;

    @ManyToOne
    @JoinColumn(name = "PARENT_ID")
    private Person parent;

}


当我使用 PersonRepository.findOneByParentId(10L); 并查看日志 sql 是

    选择
        person0_."id" 作为 id1_99_,
        pgp_sym_decrypt(decode(NAME, 'hex'), 'key') as name2_99_
    从
        “公共”。“人”person0_
    左外连接
        “公共”。“人” person1_
            在 person0_."parent_id"=person1_."id"
    在哪里
        person1_."id"=?


此错误消息

错误:列引用“名称”不明确


为什么@ColumnTransformer不添加列“名称”的表别名,我该怎么办?

标签: javahibernatespring-bootjpa

解决方案


我遇到了这个问题,添加 forColumn 属性对我有用。

@ColumnTransformer(forColumn = "lastName",


推荐阅读