我们已经为我们的一张表实施了Hibernate envers审核(@audited),并且一切正常。但是在表中,我们正在使用对称密钥加密逻辑对某些字段进行加密,而在我们的实体中,我们包括了@column传输以进行读写操作。
在这里,每当我们首先执行任何CRUD操作时,我们都会编写一个本机查询来打开对称密钥,并且一旦完成CRUD操作,我们便会关闭它。如果未打开对称密钥,则该值为null。在我们的“审核”表中,除了那些已加密的列之外,所有值都将被审核。
因此,根本原因是当hibernate创建一个要插入审计表的查询时,它没有打开对称密钥,因此值被存储为null。
简而言之,在休眠执行对审计表的任何插入之前,有任何方法可以打开对称密钥,一旦完成插入,就需要关闭对称密钥
我们正在使用带有Spring JPA的hibernate envers版本5.0.12
@Entity
@Table(name = "CUSTOMER")
@Audited
public class Customer {
@Id
@GeneratedValue
@Column(name = "CUSTOMER_ID")
private long customerId;
@Column(name = "USERNAME")
private String userName;
@Column(name = "FIRST_NAME")
@ColumnTransformer(
read = "CONVERT(VARCHAR(50), DecryptByKey(FIRST_NAME))",
write = "EncryptByKey (Key_GUID('DBSymKey'), ?)")
private byte[] firstName;
@Column(name = "LAST_NAME")
@ColumnTransformer(
read = "CONVERT(VARCHAR(50), DecryptByKey(LAST_NAME))",
write = "EncryptByKey (Key_GUID('DBSymKey'), ?)")
private byte[] lastName;
}