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
提供性能优势,因为数据库执行某些操作。
此外,您实际上可以创建一个AttributeConverter
,applies 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> 而失败