簡體   English   中英

如何避免 Openjpa 在自動生成的字段中設置 null 值?

[英]How to avoid Openjpa set null value in autogenerated field?

我正在嘗試將一個應用程序從 websphere 8 遷移到 websphere 9。打開的 jpa 從 2.0 更新到 2.1。 遷移后我在保存時出錯。 自動生成的 Id 字段設置為 null 並拋出數據庫異常。

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "TestID")
private Long testID

錯誤在下面給出

INSERT NTO TEST(Test_ID,Test_Value)
values(?,?) [params=(null) null DB2 SQL Error:SQLCODE=-798, SQLSTATE= 428C9

這是 WebSphere 遷移工具涵蓋的 OpenJPA 和 EclipseLink 之間的一個已知差異。 此遷移問題的幫助包括:

“OpenJPA 和 EclipseLink 創建不同的表來為具有 @GeneratedValue 或 @GeneratedValue(strategy=GenerationType.AUTO) 注釋的屬性生成值。如果您的應用程序包含具有由 OpenJPA 生成的屬性的實體,則使用 EclipseLink 持久化新實體會導致一個錯誤,因為 EclipseLink 試圖從 EclipseLink 表生成這些值。

通過將實體配置為使用 OpenJPA 序列表來生成屬性值來解決此問題。 通過這樣做,EclipseLink 使用 OpenJPA 表中列出的最后一個值來生成屬性值。”

遷移工具可以從以下網址下載: https://ibm.biz/wamtdownloads 我鼓勵您首先使用二進制掃描器來快速掃描您的應用程序存檔,並查看完整的規則幫助和有關任何其他潛在問題的信息。 在這種情況下,Eclipse 工具中有一個代碼快速修復,可幫助您更改代碼以遷移到 EclipseLink。

遷移工具可用於在傳統 WebSphere 版本之間移動,從傳統 WebSphere 到 Liberty,在 Liberty Java EE 級別之間,以及在 Java SE 版本之間移動。

順便說一句,如果您願意,可以將 WebSphere v9 配置為使用 JPA 2.0: https://www.ibm.com/docs/en/was/9.0.5?topic=applications-identifying-modifying-jpa-specification-level

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM