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

标签 java hibernate jpa encryption

我有一个数据库,其中有一些带有加密列的表。到目前为止,所有这些列都是字符串类型。我正在使用 JPA 的 @Converter 来加密和解密表中的列。不过,我也知道,我可以使用 Hibernate 的 @ColumnTransformer 来实现读写操作时加密和解密的相同目的。我的问题是它们有何不同,在速度、可维护性、 future 增强等方面哪种方法更好?现在,@Converter 可以很好地处理字符串类型的数据。我不确定它是否适用于整数类型,否则我将不得不创建一个新的转换器类。

最佳答案

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

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

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

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

所以它们都可以用来执行类似的事情,并且没有一个隐含地比另一个更好

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

相关文章:

java - Hibernate 将关联映射为 map

java - DAO 级别 boolean 方法的最佳实践

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : error in SQL syntax

java - Java中的多重继承即使类继承了Object

java - 单元测试所有集合不能为空的通用方法

oracle - Hibernate逆向工程师(oracle)将NUMBER转换为零精度big_decimal

java - 如何识别导致 JVM CPU 使用率在 Jboss Java 应用程序中达到 90% 到 100% 的线程?

mysql - Tomcat、Hibernate、ElasticBeanStalk、RDS、MySql 数据库连接

java - JPA异常: Object: null is not a known entity type

java - JPA - 通过 jpaql 创建表