I have many-to-many relation between Project and Document which is mapped that way:
@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>();
When I run the JUnit test, I get the NullPointerException
from within the OpenJPA engine. This is the stack trace:
org.apache.openjpa.persistence.PersistenceException: null at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1027) at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:926) at com.ibm.ws.persistence.kernel.WsJpaBrokerImpl.find(WsJpaBrokerImpl.java:188) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1033) at com.ibm.ws.persistence.jdbc.kernel.WsJpaJDBCStoreManager.load(WsJpaJDBCStoreManager.java:143) at org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:280) at org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:2381) at org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:274) at org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObject(InstanceResultObjectProvider.java:60) at org.apache.openjpa.kernel.QueryImpl$PackingResultObjectProvider.getResultObject(QueryImpl.java:2075) at org.apache.openjpa.lib.rop.EagerResultList.(EagerResultList.java:36) at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1251) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1007) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794) at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542) at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:286) at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:302) at com.ibm.ws.persistence.QueryImpl.getResultList(QueryImpl.java:118) at org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:330) (...) Caused by: java.lang.NullPointerException at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setInverseRelation(JDBCStoreManager.java:453) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:413) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:306) at com.ibm.ws.persistence.jdbc.kernel.WsJpaJDBCStoreManager.initialize(WsJpaJDBCStoreManager.java:178) at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112) at org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57) at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1046) at com.ibm.ws.persistence.kernel.WsJpaBrokerImpl.initialize(WsJpaBrokerImpl.java:271) at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1004) ... 47 more
There are no details about what is the exact problem here. The fact that I got unchecked runtime exception suggests, that there's a but in the JPA engine implementation. How can I find out WHY exactly such error occures and what can be changed to prevent this?
Those are my persistence.xml settings for the JUnit tests:
<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" />
I'm using OpenJPA version from the WebSphere 8.5.