Hallo,
Ich habe da leider ein Problem mit dem JBoss Application Server 4.0.3 RC1, EJB 3.0 und Hibernate.
Ich möchte gerne alle Kinder-Knoten eines Eltern-Knoten selektieren in meiner Abfrage. Zwar erhalte ich alle Daten des Eltern-Knotens aber manchmal passiert es, dass es nicht funktioniert. Die Kinder-Daten werden mit Hilfe des INNER JOIN FETCH geladen.
Code:
FROM ParentClass parent"
INNER JOIN FETCH parent.childrens"
WHERE parent.id = :myIdParam"
In meinen Annotationen habe ich meiner Meinung nach keinen Fehler, weil ich meistens die richtigen Daten erhalte (inkl. Kinder-Daten). Obwohl ich die selbe Funktion mehrmals aufrufe kann es sein, dass es einmal erfolgreich ist und manchmal einen Fehler (Kind-Knoten = null) liefert.
Code:
java.lang.NullPointerException
at mypackage.myJUnitTestMethod(MyClass.java:122)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Der Quelltext von MyClass sieht folgendermaßen aus:
Code:
Collection<Person> coll = personService.getPerson(123);
Iterator it = coll.iterator();
Person p;
Children c;
try
{
while (it.hasNext())
{
p = (Person) it.next();
System.out.println("p.id: " + p.getId());
c = p.getChildren();
System.out.println("children.name: " + c.getName()); // Zeile 122
}
} catch (Exception e)
{
e.printStackTrace();
}
Manchmal liefert die Zeile
c = p.getChildren(); einen null-Wert, obwohl ich keine Änderungen beim Parameter vornehme. Ich könnte zwar zusätzlich die NullPointer-Exception fangen aber das ändert nichts am Grundproblem, dass die Funktion mit den selben Parametern unterschiedliche Ergebnisse liefert.
Nachdem ich den JBoss AS neu gestartet habe funktioniert es einige Zeit ohne Probleme - es kann aber nicht sein, dass ich den AS immer wieder neu starten muss damit es funktioniert.
Hoffentlich kann mir jemand von euch weiterhelfen.
Vielen Dank im Voraus,
Alex