【问题标题】:WebSphere Application Server V8.0.0.5 JPA Unable to persistWebSphere Application Server V8.0.0.5 JPA 无法持久化
【发布时间】:2023-11-28 20:20:01
【问题描述】:

我的代码在 WAS 7 上运行良好,但在 WAS 8.0.0.5 中运行时失败。我使用 JPA 2.0 和 openJPA 作为我的提供者。在我的 em 上调用 persist 会引发嵌套异常。有没有人设法在 WAS 8.0.0.5 中编写 JPA 程序

这里是例外

WTRN0074E:从 before_completion 同步操作捕获的异常:org.apache.openjpa.persistence.PersistenceException:DB2 SQL 错误:SQLCODE=-204,SQLSTATE=42704,SQLERRMC=.OPENJPA_SEQUENCE_TABLE,DRIVER=3.58.81 {prepstmnt -1559269434 SELECT来自 .OPENJPA_SEQUENCE_TABLE 的 SEQUENCE_VALUE ID = ?只读与 RS 使用并保持更新锁 [params=?]}

【问题讨论】:

    标签: jpa jpa-2.0 openjpa websphere-portal websphere-8


    【解决方案1】:

    SQLCODE=-204 指出缺少某些内容。日志不断打印 THAKHANI.OPENJPA_SEQUENCE_TABLE 这让人认为可能是表丢失了。您还可以检查以确保 JPA 使用的 DB2 用户有权创建表并在其上运行 SELECT 语句。

    【讨论】:

    • 当我从表中生成实体时,我选择键作为自动而不是身份,坚持代码试图从不存在的 OPENJPA_SEQUENCE_TABLE 中获取 ker。 THAKHANI 是我的默认模式。该代码现在正在运行。谢谢。
    【解决方案2】:

    在从表生成实体时,我通过选择 Identity 作为我的主键生成机制来设法解决该问题。我还在我的 persistence.xml 中添加了以下内容。

    <properties>
        <!-- OpenJPA specific properties -->
        <property name="openjpa.TransactionMode" value="managed"/>
        <property name="openjpa.ConnectionFactoryMode" value="managed"/>
        <property name="openjpa.jdbc.DBDictionary" value="db2"/>
        <property name="openjpa.jdbc.Schema" value=<SchemaName>/>
     </properties>
    

    【讨论】: