[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[eclipselink-users] DynamicClass Name containing a dot
|
Hi All
When we create a DynamicClass using
DynamicClassLoader.createDynamicClass(className), then how is the
class name expected to be interpreted if it contains a dot
character.
Lets say if the className be "p.c".
Is "p" treated as the package and "c" as the class within the
package?
The attached program throws the following exception:
Exception [EclipseLink-51000] (Eclipse Persistence Services
- 2.3.0.v20110324-r9156):
org.eclipse.persistence.exceptions.DynamicException
Exception Description: Invalid
DynamicEntity[DynamicEntityType(type) -
RelationalDescriptor(p1.type --> [DatabaseTable(addrinfo)])]
property name: addrline2
at
org.eclipse.persistence.exceptions.DynamicException.invalidPropertyName(DynamicException.java:66)
at
org.eclipse.persistence.internal.dynamic.DynamicEntityImpl.get(DynamicEntityImpl.java:145)
at jpatest.UniqueTypeName.main(UniqueTypeName.java:79)
Ideally I would expect p1.type and p2.type to be treated as
separated classes. Is the above behavior expected or is it a bug in
Eclipselink?
--
Thanks and Regards
Rohit Banga
Member Technical Staff
Oracle Server Technologies
|
import java.util.List;
import java.util.Vector;
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.queries.ReadAllQuery;
import org.eclipse.persistence.sessions.DatabaseLogin;
import org.eclipse.persistence.sessions.DatabaseRecord;
import org.eclipse.persistence.sessions.DatabaseSession;
public class UniqueTypeName
{
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();
DynamicHelper helper = new DynamicHelper(session);
DynamicClassLoader dcl = helper.getDynamicClassLoader();
Class<?> type1 = dcl.createDynamicClass("p1.type");
Class<?> type2 = dcl.createDynamicClass("p2.type");
DynamicTypeBuilder type1Builder = new JPADynamicTypeBuilder(type1, null, "addrinfo");
DynamicTypeBuilder type2Builder = new JPADynamicTypeBuilder(type2, null, "addrinfo");
type1Builder.setPrimaryKeyFields("addrid");
type1Builder.addDirectMapping("addrid", String.class, "addrid");
type1Builder.addDirectMapping("addrline1", String.class, "addr1");
type2Builder.setPrimaryKeyFields("addrid");
type2Builder.addDirectMapping("addrid", String.class, "addrid");
type2Builder.addDirectMapping("addrline1", String.class, "addr1");
type2Builder.addDirectMapping("addrline2", String.class, "addr2");
helper.addTypes(false, true, type2Builder.getType(), type1Builder.getType());
ReadAllQuery query = new DynamicHelper(session).newReadAllQuery(
type1Builder.getType().getDescriptor().getAlias());
query.prepareCall(session, new DatabaseRecord());
System.out.println("query: " + query.getSQLString());
List<DynamicEntity> emps = (List<DynamicEntity>) session.executeQuery(query);
for (DynamicEntity entity : emps)
{
System.out.println(entity.get("addrid"));
System.out.println(entity.get("addrline1"));
System.out.println();
}
ReadAllQuery query1 = new DynamicHelper(session).newReadAllQuery(
type2Builder.getType().getDescriptor().getAlias());
query1.prepareCall(session, new DatabaseRecord());
System.out.println("query: " + query1.getSQLString());
emps = (List<DynamicEntity>) session.executeQuery(query1);
for (DynamicEntity entity : emps)
{
System.out.println(entity.get("addrid"));
System.out.println(entity.get("addrline1"));
System.out.println(entity.get("addrline2"));
System.out.println();
}
}
}