映射@ManyToMany关系时JDBCStoreManager.setInverseRelation中的NullPointerException - 找出错误的内容?

时间:2014-10-08 07:05:44

标签: java jpa many-to-many openjpa

我在Project和Document之间有多对多的关系,这种关系以这种方式映射:

@LoadFetchGroup("documents")
@ManyToMany(targetEntity = entity.Document.class, mappedBy = "projects", cascade = CascadeType.ALL)
private List<Document> docs = new LinkedList<Documents>();

@ManyToMany(targetEntity = Project.class, cascade = CascadeType.ALL)
@JoinTable(name = "Project2Doc", joinColumns = @JoinColumn(name = "DOCID", columnDefinition = "int", nullable = false), inverseJoinColumns = @JoinColumn(name = "PROJECTID", columnDefinition = "int"))
private List<Project> projects = new LinkedList<Project>();

当我运行JUnit测试时,我从OpenJPA引擎中获取NullPointerException。这是堆栈跟踪:

  

  org.apache.openjpa.persistence.PersistenceException:null at   org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1027)at at   org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:926)at at   com.ibm.ws.persistence.kernel.WsJpaBrokerImpl.find(WsJpaBrokerImpl.java:188)     在   org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1033)     在   com.ibm.ws.persistence.jdbc.kernel.WsJpaJDBCStoreManager.load(WsJpaJDBCStoreManager.java:143)     在   org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:280)     在   org.apache.openjpa.jdbc.sql.SelectImpl $ SelectResult.load(SelectImpl.java:2381)     在   org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:274)     在   org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObject(InstanceResultObjectProvider.java:60)     在   org.apache.openjpa.kernel.QueryImpl $ PackingResultObjectProvider.getResultObject(QueryImpl.java:2075)     在   org.apache.openjpa.lib.rop.EagerResultList。(EagerResultList.java:36)     在org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1251)     在org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1007)     在org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863)     在org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)     在   org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)     在   org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:286)     在   org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:302)     在com.ibm.ws.persistence.QueryImpl.getResultList(QueryImpl.java:118)     在   org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:330)     (...)引起:java.lang.NullPointerException at   org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setInverseRelation(JDBCStoreManager.java:453)     在   org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:413)     在   org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:306)     在   com.ibm.ws.persistence.jdbc.kernel.WsJpaJDBCStoreManager.initialize(WsJpaJDBCStoreManager.java:178)     在   org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)     在   org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)     在   org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1046)     在   com.ibm.ws.persistence.kernel.WsJpaBrokerImpl.initialize(WsJpaBrokerImpl.java:271)     在org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1004)     ......还有47个

这里没有关于确切问题的详细信息。我得到未经检查的运行时异常的事实表明,在JPA引擎实现中有一个但是。我怎样才能找出为什么会发生这样的错误以及可以改变哪些以防止这种情况?

这些是我的JUnit测试的persistence.xml设置:

  <property name="openjpa.TransactionMode" value="local"/>
  <property name="openjpa.ConnectionFactoryMode" value="local"/>
  <property name="openjpa.DetachState" value="fetch-groups(DetachedStateField=true)"/>
  <property name="openjpa.RuntimeUnenhancedClasses" value="supported" />

我正在使用WebSphere 8.5中的OpenJPA版本。

1 个答案:

答案 0 :(得分:1)

首先,我会建议你在任何时候点击一个例外谷歌它。如果你愿意的话,first result is a JIRA会告诉你openjpa.RuntimeUnenhancedClasses已经破坏而且不会被修复。更重要的是,在WebSphere内部运行时,该功能不受支持。