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

问题描述 投票:0回答:1

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

java hibernate jpa encryption
1个回答
1
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.