JPA AttributeConverter和Hibernate的ColumnTransformer在属性的加密和解密方面的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPA AttributeConverter和Hibernate的ColumnTransformer在属性的加密和解密方面的区别相关的知识,希望对你有一定的参考价值。

我有一个数据库,其中包含一些带有加密列的表。截至目前,所有这些列都是String类型。我正在使用JPA的@Converter来加密和解密表中的列。但是,我也知道,我可以使用Hibernate的@ColumnTransformer来实现读写操作时加密和解密的相同目标。我的问题是它们在速度,可维护性,未来增强等方面有何不同,哪种方法更好?现在,@Converter正在使用String类型的数据。我不确定它是否适用于Integer类型,否则我将不得不创建一个新的Converter类。

答案

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

一个主要区别是一个是Hibernate特定的,另一个是JPA规范的一部分。如果您想编写与规范匹配的代码,请使用@Converter,您将能够使用除Hibernate之外的其他实现与您的代码。

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

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

因此,它们都可以用来执行类似的事情,也不会隐含地比另一个更好。

以上是关于JPA AttributeConverter和Hibernate的ColumnTransformer在属性的加密和解密方面的区别的主要内容,如果未能解决你的问题,请参考以下文章

LocalDateTime 的 JPA AttributeConverter

JPA AttributeConverter和Hibernate的ColumnTransformer在属性的加密和解密方面的区别

JPA/Hibernate:在复杂类上使用 AttributeConverter 时创建 UserType 是不是显而易见?

jpa AttributeConverter 是不是适用于查询子句?

SpringBoot JPA 2.1 Converter 忽略 convertToDatabaseColumn

Spring Envers 因 @Converter 和 AttributeConverter<LocalDate,Date> 而失败