2014-02-24 34 views
0

JPA 2.0是否支持用戶定義的類型?我正在使用OpenJPA。我查看了2.0規範,並沒有看到有關用戶定義類型的任何信息。我有點驚訝,我錯過了什麼?JPA 2.0是否支持用戶定義的類型?

通過用戶定義的類型,我的意思是像Hibernate允許的。例如,您可以定義一個客戶顏色類型,該類型映射到RED,GREEN和BLUE列,然後在您的對象中保留一個Color字段。這也可以用Embedded對象完成,但用戶定義類型可用於其他事情。

的特定問題我已經是這樣的:

我有一個LocationCode類型(其形成位置實體的一部分),其由3個數值字段。在我已經給出的數據庫模式中,它被映射到1列,其中包含3個字段作爲字符串附加在一起。我想從應用程序中隱藏這種「映射」邏輯,以保持業務邏輯的清潔,並且定義在一個更抽象的層次上,而不是像這樣處理存儲邏輯。

我的第一次嘗試是將LocationCode定義爲我的對象上的@Transient,並將另一個String字段映射到該列。在@PreUpdate @PrePersist和@PreLoad上,通過設置字符串字段或將其解析到LocationCode字段中,執行3個數字值和1個字符串之間的轉換,並執行其他操作。

問題出在EntityManager.merge()上。我無法將Location實體合併到數據庫中,因爲@Transient LocationCode字段未由合併複製。因此,我必須自己處理merge()的這一部分,這種類型會破壞級聯合並的使用。

我認爲,如果我使用LocationCode的自定義用戶定義類型,那麼我可以有一個LocationCode,它是一個託管字段,但仍能夠將3個數值映射到1個數據庫列上。然後merge()會工作。

如果用戶定義類型不在2.0中,那麼它們是否會添加到新版JPA中?或者我可以在OpenJPA特定的API中找到它們?

感謝您的幫助。

+0

你應該看看JPA 2.1 –

+0

是的,我看到它在那裏。我被困在OpenJPA 2.2.0上,目前它只能上升到2.0。 – user2800708

回答