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.

Reply via email to