【问题标题】:EclipseLink JTA Persistence issue (Null Pointer Exception)EclipseLink JTA 持久性问题(空指针异常)
【发布时间】:2015-03-13 18:03:06
【问题描述】:

我有两个实体在 Mater Detail 模式中工作,就像我在中描述的那样:

Stackoverflow Post: jpa-eclipselink-onetomany-derived-ids-fail

该模式在 LOCAL RESOURCE 中按预期工作,但是当我尝试将示例移动到带有 JTA 的 Web 环境 GlassFish4.1 (JSF) 时,我收到以下错误:

广告:DTX5014:在 beforeCompletion() 回调中捕获异常: entidades.OrderItemPK._persistence_set(OrderItemPK.java) 处的 java.lang.NullPointerException

持久化类源码:

import java.util.List;
import javax.persistence.Query;
import javax.persistence.EntityManager;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.EntityManager;


public abstract class AbstractFacade<T> {

    private Class<T> entityClass;
    protected abstract EntityManager getEntityManager();    

    public AbstractFacade(Class<T> entityClass) {
    this.entityClass = entityClass;
    }

    public void create(T entity) {
    getEntityManager().persist(entity);
    }

    public T edit(T entity) {
    return getEntityManager().merge(entity);
    }

    public void remove(T entity) {
    getEntityManager().remove(getEntityManager().merge(entity));
    }

我尝试了创建和编辑这两种方法。任何想法我做错了什么,欢迎提出建议。

【问题讨论】:

  • 假设您正在使用带有嵌入的 mapsId 示例,这个错误什么时候发生?即当您创建一个新实例或编辑现有实例时?如果它是已修改的现有实例,您如何读取它以及正在进行哪些更改?如果使用PK类而不是embeddedId,是否也会出现同样的问题?
  • 所有实体都是新实例,到目前为止我一直坚持使用“create”方法,我无法让它工作,也不能让它工作与PK类映射实体

标签: java mysql jpa eclipselink jta


【解决方案1】:

您的实体正在使用不允许为空的基本“长”类型,因此请检查您的数据库值是否为空。如果是,一个快速的解决方法是将包装类型更改为“Long”:http://edwin.baculsoft.com/2012/02/nullpointerexception-when-using-jpa/ 如果是这种情况,您将需要跟踪数据库是如何使用与主键关联的字段的空值填充的。

【讨论】:

  • 感谢您的关注,我可以找到解决问题的方法,我会作为答案提出
【解决方案2】:

问题出在PK类,将数据类型int改为Integer,然后方法hashCode()上出现错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2017-03-19
    • 1970-01-01
    • 2014-12-02
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多