While it should be perfectly fine if not all testentities have children (size()
should just return 0), I have dropDB in my persistence.xml, so tables are
dropped and recreated with every run.
In this example, the call to merge() is indeed unnecessary, but in the real
program I need to read a huge table and thus have to repeatedly clear() the
persistence context so I can keep the memory footprint low. The clear() is
causing all objects to be detached. Im reading this huge table within an outer
loop which traverses another table, and I need to merge those entities so I can
be sure I can access their lazy associations.
Weird that it works for you...is there anything further I can do to debug this?
It seems it fetches the children collection before the NPE, btw... here's a log:
2344 openjpa TRACE [main] openjpa.Runtime - Query "SELECT * FROM TestEntity
t" is cached."
2344 openjpa TRACE [main] openjpa.Query - Executing query: Query:
org.apache.openjpa.kernel.QueryImpl@d22462; candidate class: class
test.TestEntity; query: null
2391 openjpa TRACE [main] openjpa.jdbc.SQL - <t 17284365, conn 16645208>
executing prepstmnt 29806874 SELECT t0.id FROM TestEntity t0
2391 openjpa TRACE [main] openjpa.jdbc.SQL - <t 17284365, conn 16645208> [0
ms] spent
2406 openjpa TRACE [main] openjpa.jdbc.JDBC - <t 17284365, conn 0> [0 ms]
close
I got 1 entities...
2422 openjpa TRACE [main] openjpa.jdbc.SQLDiag - load field: 'children' for
oid=328601 class test.TestEntity
2438 openjpa TRACE [main] openjpa.jdbc.SQL - <t 17284365, conn 16645208>
executing prepstmnt 1497769 SELECT t0.id FROM TestEntity2 t0 WHERE t0.PARENT_ID
= ? [params=(int) 328601]
2438 openjpa TRACE [main] openjpa.jdbc.SQL - <t 17284365, conn 16645208> [0
ms] spent
2438 openjpa TRACE [main] openjpa.jdbc.JDBC - <t 17284365, conn 0> [0 ms]
close
Exception in thread "main" java.lang.NullPointerException
at test.Test.main(Test.java:41)
regards,
Michael
-----Ursprüngliche Nachricht-----
Von: Rick Curtis [mailto:[email protected]]
Gesendet: Donnerstag, 4. August 2011 16:00
An: [email protected]
Betreff: Re: NullpointerException when accessing a lazy association after
merging the object without a fetch of the lazy entities
I don't see any issues. Is it possible that you have a TestEntity in your DB
that doesn't have any children (bad data) in your DB from a previous run?
Also, why are you calling em.merge(..)? That call is unnecessary as the
results from your query already are a part of your persistence context.
Thanks,
Rick
___________________________________________________
SMA Solar Technology AG
Aufsichtsrat: Guenther Cramer (Vorsitzender)
Vorstand: Juergen Dolle, Roland Grebe, Uwe Hertel, Pierre-Pascal Urbon, Marko
Werner
Handelsregister: Amtsgericht Kassel HRB 3972
Sitz der Gesellschaft: 34266 Niestetal
USt-ID-Nr. DE 113 08 59 54
WEEE-Reg.-Nr. DE 95881150
___________________________________________________