[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Work on OPENJPA-1804 started by Donald Woods. > NPE in MappingInfo.java line 1514 > --------------------------------- > > Key: OPENJPA-1804 > URL: https://issues.apache.org/jira/browse/OPENJPA-1804 > Project: OpenJPA > Issue Type: Bug > Components: Enhance, UnenhancedClasses, usability > Affects Versions: 2.0.1 > Reporter: Willis Blackburn > Assignee: Donald Woods > Fix For: 2.1.0 > > > 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.