我想在生產MySQL系統中爲主鍵使用GenerationType.IDENTITY。但對於本地開發和測試,我想使用HSQLDB。問題在於HSQLDB不支持GenerationType.IDENTITY(至少在Eclipselink中)。我試着設置了GenerationType.AUTO,它默認爲HSQLDB的TABLE,但不幸的是它對MySQL也是如此,這不是我想要的。有什麼方法可以在persistence.xml中覆蓋這個嗎?是否還有其他一些技巧我可以使用,以便每個環境都能做正確的事情?我沒有在XML中設置任何實體配置(全部在註釋中),我不想改變它,所以我正在尋找一種避免這種情況的方式。爲測試/生產支持不同的JPA GenerationTypes
4
A
回答
2
這裏的基本思想是使用一個自定義生成器,它可以根據元數據信息在標識和表(或者其他需要的其他策略)之間進行內部切換。
但是,使用標準JPA無法執行此操作。雖然@GeneratedValue
註釋確實定義了generator
參數,它使您能夠specify a custom generator它不提供任何寫入機制(只允許您使用內置的表/序列生成器)。
這取決於特定的JPA提供程序是否(不)實現此功能。關於如何定義自定義生成器的EclipseLink wiki has an example。您需要修改它以在內部創建TableSequence
/NativeSequence
實例,並根據session.getPlatform()
在兩者之間切換。
聲明:我還沒有嘗試過使用EclipseLink的上述;不過,我在Hibernate中做了一些非常類似的事情。
1
HSQLDB顯然本身支持IDENTITY列(絕對在v1.8中),所以這是EclipseLink中的一個缺陷。例如,DataNucleus爲HSQLDB提供了IDENTITY支持。
正如您清楚地知道的那樣,指定使用XML對於跨數據存儲庫部署有好處。
相關問題
- 1. Django的支持生產
- 2. nunit-console測試從不同位置產生不同的結果
- 3. 測試,如果瀏覽器支持「乘」爲globalCompositeOperation帆布財產
- 4. 爲什麼maven不支持jpa 2.0?
- 5. Spring Data Jpa不支持Groupby
- 6. UWP不支持的測試版版本?
- 7. 重置JPA測試之間產生的值
- 8. 用於測試和生產的JPA資源
- 9. 如何支持測試Facebook身份驗證的不同階段
- 10. Android測試支持庫未找到Espresso和不同的BuildVariants
- 11. jQuery的 - 財產不支持
- 12. 搜索同名「測試產品」和「測試產品」的產品
- 13. 如何使用javascript支持測試senario並且不支持javascript?
- 14. Spring測試-MVC PUT不支持
- 15. 不支持瓶測試信號錯誤
- 16. Solr支持不同類型產品的不同刻面
- 17. JS測試:目標支持
- 18. 測試是否支持Three.js
- 19. Play商店:Beta測試和生產APK不同的證書
- 20. 不同於測試和生產環境的開發環境?
- 21. Rails的「子環境」 - 仍然生產(或測試等),但不同
- 22. 測試和生產環境之間的數據不同
- 23. 生產模式下的Creative SDK支持
- 24. 需要支持,產生使用StringBuilder的
- 25. 測試客戶端不支持WCF服務合同
- 26. 爲什麼Junit測試僅支持不完整的覆蓋叉?
- 27. 匕首不產生組件/測試類
- 28. 測試Akka流不產生值
- 29. 針對不同階段有不同的initial_data燈具(測試訴生產)
- 30. 單元測試JPA /持久性通用
有趣。我會向Eclipselink人員提出問題。這肯定會讓事情變得更簡單。 – Tim 2009-11-09 16:27:19