[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[eclipselink-users] Null Pointer Exception when using Scrollable Cursor on a OneToMany Mapping
|
Hi All
I am getting a NullPointerException when trying
to execute a ReadAllQuery with scrollable cursor enabled. It seems
that the exception happens when it tries to access the many side of
the mapping.
I am using Eclipselink-2.3. Here is the stack trace:
Exception in thread "main" java.lang.NullPointerException
at
org.eclipse.persistence.internal.queries.JoinedAttributeManager.processDataResults(JoinedAttributeManager.java:1074)
at
org.eclipse.persistence.queries.ScrollableCursor.retrieveNextObject(ScrollableCursor.java:557)
at
org.eclipse.persistence.queries.ScrollableCursor.loadNext(ScrollableCursor.java:397)
at
org.eclipse.persistence.queries.ScrollableCursor.hasNext(ScrollableCursor.java:263)
at ScrollableCursorTest.main(ScrollableCursorTest.java:80)
I have attached the sample code along with this mail. Can someone
please have a look at it and see what is amiss?
Thanks in Advance!
--
Thanks and Regards
Rohit Banga
Member Technical Staff
Oracle Server Technologies
|
import java.util.List;
import java.util.Vector;
import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.eclipse.persistence.config.TargetDatabase;
import org.eclipse.persistence.dynamic.DynamicClassLoader;
import org.eclipse.persistence.dynamic.DynamicEntity;
import org.eclipse.persistence.dynamic.DynamicHelper;
import org.eclipse.persistence.dynamic.DynamicTypeBuilder;
import org.eclipse.persistence.internal.sessions.DatabaseSessionImpl;
import org.eclipse.persistence.jpa.dynamic.JPADynamicTypeBuilder;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.queries.ReadAllQuery;
import org.eclipse.persistence.queries.ScrollableCursor;
import org.eclipse.persistence.sessions.DatabaseLogin;
import org.eclipse.persistence.sessions.DatabaseRecord;
import org.eclipse.persistence.sessions.DatabaseSession;
/**
* @author rbanga
*/
public class ScrollableCursorTest
{
public static void main(String[] args)
{
DatabaseLogin login = new DatabaseLogin();
login.setUserName("");
login.setPassword("");
login.setDriverURLHeader("jdbc:oracle:thin:@");
login.setDriverClassName("oracle.jdbc.OracleDriver");
login.setDatabaseURL("");
DatabaseSession session = new DatabaseSessionImpl(login);
session.login();
session.setProperty(PersistenceUnitProperties.TARGET_DATABASE, TargetDatabase.Oracle11);
session.setProperty(PersistenceUnitProperties.NATIVE_SQL, "true");
session.setLogLevel(SessionLog.FINEST);
DynamicHelper helper = new DynamicHelper(session);
DynamicClassLoader dcl = helper.getDynamicClassLoader();
Class<?> empType = dcl.createDynamicClass("jpatest.empinfo");
Class<?> phoneType = dcl.createDynamicClass("jpatest.phone");
DynamicTypeBuilder empBuilder = new JPADynamicTypeBuilder(empType, null, "empinfo4");
DynamicTypeBuilder phoneBuilder = new JPADynamicTypeBuilder(phoneType, null, "phone4");
empBuilder.setPrimaryKeyFields("id");
empBuilder.addDirectMapping("id", String.class, "id");
empBuilder.addDirectMapping("name", String.class, "name");
phoneBuilder.setPrimaryKeyFields("phone");
phoneBuilder.addDirectMapping("phone", int.class, "phone");
empBuilder.addOneToManyMapping("empinfo4.phone4.empid", phoneBuilder.getType(), "empid");
phoneBuilder.addOneToOneMapping("empinfo4.phone4.empid", empBuilder.getType(), "empid");
helper.addTypes(false, true, empBuilder.getType(), phoneBuilder.getType());
ReadAllQuery query = new DynamicHelper(session).newReadAllQuery(empBuilder.getType().getDescriptor().getAlias());
query.addJoinedAttribute(query.getExpressionBuilder().anyOf("empinfo4.phone4.empid"));
query.useScrollableCursor();
query.prepareCall(session, new DatabaseRecord());
System.out.println("query: " + query.getSQLString());
ScrollableCursor scrollableCursor = (ScrollableCursor) session.executeQuery(query);
while (scrollableCursor.hasNext())
{
int pageSize = 5;
System.out.println("Fetch Next Page");
List<DynamicEntity> emps = new Vector();
for (int i = 0; i < pageSize; ++i)
{
if (!scrollableCursor.hasNext())
break;
emps.add((DynamicEntity) scrollableCursor.next());
}
for (DynamicEntity entity : emps)
{
System.out.println(entity.get("id"));
System.out.println(entity.get("name"));
System.out.println(entity.get("empinfo4.phone4.empid").getClass().getName());
Vector<DynamicEntity> e = entity.get("empinfo4.phone4.empid");
System.out.println(e);
System.out.println();
}
}
}
}