Skip to main content

[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();
		  }
		}

	}

}

Back to the top