2012-04-25 93 views
0

我正在使用基於OpenJPA的WebSphere 7及其JPA 2.0實現,並且我有一些讓我發瘋的東西。我必須連接到使用數據庫列加密的SQL Server 2008數據庫。加密是由幾個數據庫命令完成:JPA和SQL Server列加密

1 - OPEN對稱密鑰解密通過認證

2 - 使用數據庫的方法EncryptByKey的或DecryptByKey這個

3執行插入/選擇/更新/等 - CLOSE對稱鍵

我已經搜索,並沒有出現OpenJPA支持此功能。有人知道如何讓OpenJPA與這種類型的加密很好地發揮作用嗎?或者我應該跳過這個項目的JPA並使用良好的老式PreparedStatements?

回答

1

所以是的,它看起來像做本機查詢是唯一的方法來做到這一點。所以它會出現這樣的事情:

EntityManager em = getEntityManager(); 
Query openKey = em.createNativeQuery("OPEN SYMMETRIC KEY MY_KEY DECRYPTION BY CERTIFICATE MY_CERT"); 
openKey.executeUpdate(); 

Query query = em.createNativeQuery("SELECT FIRSTNAME, LASTNAME, CONVERT(varchar, DECRYPTBYKEY(SSN)) as SSN from report where record_id = ?", Report.class); 
query.setParameter(1, recordId); 
report = (Report) query.getSingleResult(); 

Query closeKey = em.createNativeQuery("CLOSE SYMMETRIC KEY MY_KEY"); 
closeKey.executeUpdate();