繁体   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