openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "KARR, DAVID (ATTCINW)" <dk0...@att.com>
Subject NPE loading fields of one-to-many collection
Date Mon, 14 Dec 2009 20:44:33 GMT
Using OpenJPA 1.2.1, presently with neither load-time or build-time
enhancement, for different reasons.  I have a ticket open for my
build-time enhancement issues.  It could be that since OpenJPA doesn't
support running without enhancement, I won't be able to make any
significant progress on this until my issues with build-time enhancement
are resolved.

I have mapped two simple classes, and I'm now trying to test the
mappings.  Each class has one relationship attribute.  The first one
relates to the second one, and the second one has a recursive
relationship.  Each one of these relationships is done with a join
table.  I believe I've specified the correct annotations and orm.xml
settings to do this mapping.  I tried running the generated SQL I saw
for the relationship, and it appears to give me a reasonable result.

I think the first relationship is working fine, but the second one is
giving me trouble.  When I run a request where the second relationship
ends up being empty, it works fine.  If it's not empty, I see the
following unhelpful message:

  WARNING: WebApplicationException has been caught : cause is
java.lang.NullPointerException

There is no stack trace.  So, I set Eclipse to stop on NPE and I found
it stopping at the following place:

	
com$att$ecom$dynamiccontent$domain$Category$pcsubclass.pcReplaceField(in
t) line: not available	
	StateManagerImpl.replaceField(PersistenceCapable, FieldManager,
int) line: 3025	
	StateManagerImpl.storeObjectField(int, Object) line: 2457	
	StateManagerImpl.storeObject(int, Object) line: 2447	
	
RelationCollectionTableFieldStrategy(StoreCollectionFieldStrategy).load(
OpenJPAStateManager, JDBCStore, JDBCFetchConfiguration) line: 569	
	FieldMapping.load(OpenJPAStateManager, JDBCStore,
JDBCFetchConfiguration) line: 819	
	JDBCStoreManager.load(OpenJPAStateManager, BitSet,
FetchConfiguration, int, Object) line: 688	
	
ROPStoreManager(DelegatingStoreManager).load(OpenJPAStateManager,
BitSet, FetchConfiguration, int, Object) line: 116	
	ROPStoreManager.load(OpenJPAStateManager, BitSet,
FetchConfiguration, int, Object) line: 78	
	StateManagerImpl.loadFields(BitSet, FetchConfiguration, int,
Object) line: 2921	
	StateManagerImpl.loadField(int, int, boolean, boolean) line:
2999	
	StateManagerImpl.fetchObjectField(int) line: 2242	
	StateManagerImpl.fetchField(int, boolean) line: 778	
	StateManagerImpl.fetch(int) line: 740	
	RedefinitionHelper$1.invoke(Object, Method, Object[]) line: 230	
	$Proxy130.iterator() line: not available	
      [deleted]

The fields of the class in question are:

    @Id
    private String  id;
    @Basic
    private String  displayName;
    @Temporal(TemporalType.DATE)
    private Date    creationDate;
    @OneToMany(fetch = FetchType.EAGER)
    private Set<Category>   childCategories;

The relevant portion of the orm.xml file is this:

   <entity name="Category" class="...domain.Category">
        <table name="CATEGORY"/>
        <attributes>
            <id name="id">
                <column name="CATEGORY_ID"/>
            </id>
            <one-to-many name="childCategories"
target-entity="Category">
                <join-table name="CAT_CHLDCAT">
                    <join-column name="CATEGORY_ID"
referenced-column-name="CATEGORY_ID"/>
                    <inverse-join-column name="CHILD_CAT_ID"
referenced-column-name="CATEGORY_ID"/>
                </join-table>
            </one-to-many>
        </attributes>
    </entity>

Mime
View raw message