我想知道是否可以在JPA中为@Column
注释添加其他功能。具体来说,我想做的是使用@ProtectedColumn
注释标记敏感数据列:这将告诉持久性框架将某些类型的数据保护(加密,标记化,等等......)应用于值将它们存储到实际数据存储中时,然后在从数据存储中读取值时反转该过程。
所以我可能有一个包含此代码的Customer
类:
@Column(value="Name")
private String name;
@ProtectedColumn(value="CreditCardNumber", protectionType="ultra")
private String creditCardNumber;
然后,这将存储保护信用卡号码的结果,而不是存储实际的信用卡号码,保护类型为" ultra" (不管是什么)。
显然,我不想重新实现@Column
注释中已存在的所有数据库访问功能:我只是想扩展其功能。我知道注释不是可直接扩展的(参见Why is not possible to extend annotations in Java?),但在我看来,可能可以在它到达@Column
注释之前拦截该值,所以字段定义可能如下所示:
@Protected(protectionType="ultra")
@Column(value="CreditCardNumber")
private String creditCardNumber;
所以我的第一个问题是这在理论上是否可行:如果是这样,我会理解如何以这种方式组合/扩展注释的任何指示。
答案 0 :(得分:1)
您可以使用转换器。例如,您可以像他一样实现转换器:
use converter
他使用xml配置。
如果你想使用注释,只需看看这个git存储库中的这两个java类:jpa converter with annotation
因此,您可以使用注释
@Convert(converter = JPACryptoConverter.class)
(鉴于JPACryptoConverter是AttributeConverter的子代)。
答案 1 :(得分:0)
简短的回答是否你不能通过在但中添加保护选项来扩展Hibernate中的@Column
注释来提供完全答案你肯定可以将它与其他注释结合起来,在Hibernate中保护/加密一个列你有两个可能的选择:
有用的链接:
有关这两个选项的进一步阅读,您可以查看以下Thoughts On Java教程:
您还可以查看this answer,了解如何实施自定义列变换器。
第三个选项是将 Jasypth 集成库与Hibernate一起使用,您可以在Integrating Jasypt with Hibernate 3.x or 4.x中阅读更多相关信息。