NPE in MappingInfo.java line 1514
---------------------------------
Key: OPENJPA-1804
URL: https://issues.apache.org/jira/browse/OPENJPA-1804
Project: OpenJPA
Issue Type: Bug
Affects Versions: 2.0.1
Reporter: Willis Blackburn
I am encountering a NPE at MappingInfo.java line 1514. I'm sorry I don't have
time to prepare a test case right now. I'm not even 100% sure what is causing
the problem, but it seems to be something like this:
I have classes Organization, Group, User, and AddressBook.
Group has a reference (many-to-one) to Organization.
I'm using field-level access and the Java 6 runtime enhancer. (NOT the
build-time enhancer or the agent.)
In ManagedClassSubclasser.prepareUnenhancedClasses, the code receives a list of
Class objects--the ones in persistence.xml. They are not in the same order as
they are in persistence.xml, but I don't know if that's important. The first
one is Group. During the processing of Group, the code invokes
ClassMapping.setTable to set the table name, which is "group_table." This
comes from the @Table annotation of Group. So far, so good. Then the code
does some additional processing on the relationship mappings of Group, which
include the reference to Organization. During the processing of that
relationship, the code calls MappingInfo.mergeJoinColumn. On line 1367, the
method calls rel.getTable. The "rel" variable points to the ClassMapping for
Organization. Remember that prepareUnenhancedClasses hasn't gotten to
Organization yet--it's still working on Group--and so I assume that this
Organization mapping was created on-demand. However, rel.getTable returns
null. The Organization class has a @Table attribute, and I can see that the
table name has been loaded in the ClassMappingInfo instance attached to the
ClassMapping for Organization, however the table name has not yet been copied
from ClassMappingInfo to ClassMapping. Later, the mergeJoinColumn method
attempts to dereference the null table name and generates the NPE.
Bottom line: When using the Java 6, runtime enhancer, if class A has a
reference to class B, and both classes have @Table annotations (at least), and
class A is processed first, then it produces a NPE.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.