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

时间:2018-03-01 09:13:09

标签: java hibernate jpa encryption

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

1 个答案:

答案 0 :(得分:1)

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

一个主要区别是一个是特定于Hibernate而另一个是JPA规范的一部分。如果您想编写符合规范的代码,请使用@Converter,并且除了Hibernate之外,您还可以使用其他实现代码。

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

此外,您实际上可以为给定类型的所有值创建AttributeConverter @Converter。这可能是有利的,例如在重构的情况下,您不想手动将 ProcessBuilder pb = new ProcessBuilder("/path_to/my_script.sh"); pb.redirectOutput(new File("/new_path/out.txt")); Process p = pb.start(); try { p.waitFor(); } catch (InterruptedException e) { e.printStackTrace(); } 注释添加到许多地方。

所以他们都可以用来执行类似的事情,而且两者都没有暗示更好