我有一个数据库,其中有一些带有加密列的表。到目前为止,所有这些列都是String类型的。我正在使用JPA的@Converter加密和解密表中的列。但是,我也知道,我可以使用Hibernate的@ColumnTransformer在读写操作时实现相同的加密和解密目标。我的问题是它们有何不同?从速度,可维护性,将来的增强等方面来看,哪种方法更好?现在,@Converter可以很好地处理String类型的数据。我不确定它将与Integer类型一起使用,还是必须创建一个新的Converter类。

最佳答案

它们非常相似,在许多情况下可以用于完全相同的事物,但是解决方案的实现略有不同。

一个主要区别是,一个是Hibernate特定的,另一个是JPA规范的一部分。如果要编写与规范匹配的代码,请使用@Converter,并且可以在代码中使用除Hibernate之外的其他实现。

另一个主要区别是@ColumnTransformer在数据库级别运行,而@Converter从数据库中按原样读取值,然后在应用程序端将其转换为其他值。当数据库执行某些操作时,这可能为@ColumnTransformer提供性能优势。

另外,您实际上可以为给定类型的所有值创建一个AttributeConverter@Converter。例如,在您不想手动将注释添加到许多地方的重构情况下,这可能是有利的。

因此,它们都可以用来执行相似的操作,并且两者都不比另一个更好。

关于java - 在属性的加密和解密方面,JPA的AttributeConverter和Hibernate的ColumnTransformer之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49046265/

10-09 08:27