2011-03-01 107 views
2

'Flex字段'是用於更改客戶站點上的表格以向表格添加額外列以保存關於該表格實體的自定義信息的術語。我想知道是否有人用jpa來處理這個機制,特別是eclipselink。JPA和數據庫Flex字段

我們希望這樣做,因爲我們能夠根據這些客戶指定的字段值的基本行過濾,並具有關聯表這些字段導致多個別名加入到這一若干輔助表。

一個顯而易見的方法(至少它似乎我)將是定義注入新字段到該實體對象的(諸)方面,然後運行動態編織。

我想知道是否有人已經做到了這一點,如果有關於其他方法的任何問題,我沒有看到或建議。

+0

您是否試過在EclipseLink郵件列表上詢問? – 2011-03-01 22:40:10

回答

2

所以,如果你注入新的領域進入你的實體將如何在您的應用程序中使用這些?你還會改變你的應用程序/用戶界面的代碼嗎?

最簡單的解決方案通常是在您的實體中擁有一個Map屬性,這允許在運行時添加新屬性,並允許應用程序/ UI訪問和查詢這些屬性,以便它們可以呈現它們並允許編輯和顯示。您可以使用ElementCollection或OneToMany將屬性映射到屬性表。

如果希望修改現有的表,那將更加複雜,您還需要更新JPA映射,可以通過編輯orm.xml並重新部署應用程序,或在SessionCustomizer中添加映射或DescriptorCustomizer。 EclipseLink還支持VIRTUAL AccessMode,允許將列映射到屬性而不是字段或get/set方法。

的更強力方法是更新對象模型代碼和應用程​​序代碼,以利用新的數據。

的EclipseLink還提供更加動態的解決方案,而不需要類動態實體表來映射。

見, http://wiki.eclipse.org/EclipseLink/Examples/JPA/Dynamic

+0

該實體的數據顯示在一個網格中,並且顯示的列是用戶可選的,因此無論如何,數據的獲取都是通過反射/或映射。所以gui代碼確實不會改變,它只是知道哪些字段可用,併爲用戶提供了顯示內容的選項。 – MeBigFatGuy 2011-03-02 17:52:16

+0

我不想要屬性表路由,因爲我們想根據這些額外字段中的值來過濾基本行,並且這需要屬性表上的多個別名聯接。 – MeBigFatGuy 2011-03-02 17:58:16

+0

啊,我看到動態配置使用API​​這一節看起來很有希望,我會接受這個答案作爲一個很好的答案。儘管如此,還是撓撓頭,謝謝。 – MeBigFatGuy 2011-03-02 18:03:29

2

我已經開始建設演示如何的EclipseLink可擴展模型(鍵值表或柔性列)一起使用的示例。這是一項正在進行的工作,但我已經開始增加更多的圖表,示例代碼的例子wiki頁面:

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Extensible

這也包括使用動態支持詹姆斯如上所述。

+0

看起來您的鏈接示例顯示鍵/值關聯表中的字段。這是我們以前做的事情,但是我們發現性能很糟糕,因爲我們允許基於鍵值關聯表的值過濾基本行。這就是爲什麼我們希望將這些字段作爲第一類列移動到基本行。 – MeBigFatGuy 2011-03-02 17:56:00

+0

謝謝Doug!這對我來說可能非常有用! – 2011-03-02 18:02:55

+0

擴展方法包括2個數據庫存儲選項。值使用單獨的表,Flex使用主表中的列。值確實存在性能和查詢難題。 – 2011-03-03 13:08:48