2017-04-26 41 views
1

我想知道是否可以在JPA中的@Column註釋中添加其他功能。具體來說,我想要做的是使用@ProtectedColumn批註標記敏感數據列:然後,這會告訴持久性框架在將值存儲到數據時應用某種類型的數據保護(加密,標記化,無論...)實際的數據存儲,然後在讀取數據存儲中的值時反轉該過程。是否可以向@Column註釋添加功能?

所以我可能有一個Customer類,其中包括此代碼:

@Column(value="Name") 
private String name; 

@ProtectedColumn(value="CreditCardNumber", protectionType="ultra") 
private String creditCardNumber; 

代替存儲實際的信用卡號碼,這會然後存儲保護與保護類型的信用卡號的結果,「超「(無論如何)。

很明顯,我不想重新實現@Column註釋中已經存在的所有數據庫訪問功能:我只想擴展它的功能。我知道,註釋不直接擴展(見Why is not possible to extend annotations in Java?),但在我看來,它可能有可能攔截值它到達@Column註解之前,所以也許字段定義是這樣的:

@Protected(protectionType="ultra") 
@Column(value="CreditCardNumber") 
private String creditCardNumber; 

所以,我的第一個問題是,這是否甚至在理論上是可能的:如果是這樣,我會很感激任何關於如何組合/擴展註釋的方法。

+0

由於持久性框架需要知道您的註釋,因此您可以安全地得出結論:不可能(不使用JPA提供程序細節)。 –

+1

使用JPA轉換器怎麼樣? http://www.thoughts-on-java.org/jpa-21-how-to-implement-type-converter/ –

+0

@AlanHay:完美。我不知道JPA轉換器存在。如果你認爲這是一個回答而不是評論,那麼你就會得到代表性的迴應:-(相反,你只剩下我的感激之情 –

回答

1

您可以使用轉換器。例如,您可以像他那樣實現Converter: use converter 他使用xml配置。 如果你想使用註解,只是來看看這兩個Java類在此git倉庫:jpa converter with annotation 因此,您可以使用註釋 @Convert(converter = JPACryptoConverter.class) (鑑於JPACryptoConverter是AttributeConverter的孩子)。

0

那麼簡單的答案是沒有不能簡單地通過增加一個保護選項,它延長在Hibernate中@Column註解提供一個完整的答案,你一定能與其他註釋結合起來,以保護/加密休眠列中有兩個可能的選項:

相關鏈接:

如需進一步閱讀,你可以檢查以下這兩個選項Thoughts On Java的教程:

  1. How to map encrypted database columns with Hibernate’s @ColumnTransformer annotation
  2. How to implement a JPA Attribute Converter

您還可以檢查this answer以瞭解如何實現自定義列變換器。

第三個選項是使用Jasypth帶Hibernate的集成庫,您可以在Integrating Jasypt with Hibernate 3.x or 4.x中閱讀更多關於它的知識。

相關問題