-3

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.

Danubian Sailor
  • 1
  • 38
  • 145
  • 223

1 Answers1

1

First off, I'm going to suggest that anytime you hit an exception to google it. If you would have, the first result is a JIRA that tells you that openjpa.RuntimeUnenhancedClasses is broken and isn't going to be fixed. More so, that feature is not support when running inside WebSphere.

Rick
  • 3,830
  • 1
  • 18
  • 16
  • OK, I've seen it. I've misread the line **not** to use 'supported'. But it's the only settings that works at all! Any other rises an exception that the enhanced classes doesn't exist. What your solution to that? Generate that classes that aren't of any use in our project? – Danubian Sailor Oct 09 '14 at 06:33
  • Spend the time to figure out how to enhance your Entities at build time, or figure out why they aren't being enhanced automatically by WebSphere. – Rick Oct 09 '14 at 13:39