java - @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不添加列“名称”的表别名,我该怎么办?
解决方案
我遇到了这个问题,添加 forColumn 属性对我有用。
@ColumnTransformer(forColumn = "lastName",
推荐阅读
- omnet++ - 如何在静脉中调度 selfMsgs 时修复“当前已调度信标 evt”错误
- sql - 根据平均时长连续确定结束时间
- mysql - 如何使用 cmd 在 SQL 中创建存储过程?
- java - 返回 NullPointerException 的模拟方法
- sql-server - SSIS:如何使用日期,在Execute SQL Task 1中选择,在Execute SQL Task 2中使用
- flutter - ListView 在颤动中显示空白屏幕
- r - 将具有较少观察值的因子变量水平组合在一起。对于数据框中的所有因子变量
- sql-server - 将存储的占位符与字符串进行比较
- python - 序列化 django-rest-marshmallow 中的日期字段会导致错误
- sql - PostgreSQL - 查询每行包含 5 个元素数组的单列表以返回数组拆分为每行 5 列