我们已经为我们的一个表实现了Hibernate envers audit(@audited),一切都按预期工作正常 . 但在表中我们使用对称密钥加密逻辑加密某些字段,在我们的实体中,我们已经包含@column传输用于读写操作 .

这里,每当我们首先执行任何CRUD操作时,我们将编写一个本机查询来打开对称密钥,一旦完成CRUD操作,我们将关闭它 . 如果未打开对称密钥,则该值将为null . 在我们的Audit表中,除了那些加密的列外,每个值都被审计 .

因此,根本原因是当hibernate创建一个用于插入审计表的查询时,它不会打开对称密钥,因此值将被存储为null .

简而言之,有什么方法可以在hibernate执行任何插入审计表之前打开对称密钥,一旦完成插入,就需要关闭密钥

我们正在使用带有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;

}