Proxy-Class
mistamoasn Nov 15, 2007 5:10 AMHello!
I got a problem which is similar to the following posts (no solution yet provided):
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=88515
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=121044
I have entities which are organized in an inheritance hierarchy (please have a look a the code below). When i execute a query (please look at the stateful session bean below) it returns a proxy-object. But it should be an instance of the concrete entity bean. I am facing this problem only when querying in an inheritance hierarchy. For "normal" entity beans it works fine.
How can i tell the entity beans in the inheritance hierarchy that the whole hierarchy should be fetched eager without eager fetching.
I found a (not suitable) workaround when i use the annotation @Proxy(lazy =false) at base class level. With this annotation i get the concrete instance of the entity bean (RfAuthProject-instance with id 483 like in the example below) but all associations of each entity in the hierarchy are eager fetched too. That's a problem because, it gets really slow.
How can i achieve that only the inheritance hierarchy is fetched and none of the associations?
Thanks in advance for your help.
kind regards
Patrik
ps.:
Environment: JDK1.5, JBoss 4.2.1 (with EJB3.0 embedded)
pps.:
Example code below:
@Stateful
public class MainProjectDTO implements MainProjectLocal, MainProjectRemote
{
public Project getProject()
{
// trivial example for my problem
Query query1 = em.createQuery("FROM Project p WHERE p.id = 483");
Project project = query1.getSingleResult();
// the returned project is a proxy like Project_$$_javassist_16 but
// should be an instance of RfAuthProject because it really is one.
// here lies my problem
// project with id=483 is definitly a RfAuthProject
if (project instanceof Project) --> true
if (project instanceof RfProject) --> false
if (project instanceof RfAuthProject) --> false
// following class cast fails
RfAuthProject rfAuthProject = (RfAuthProject) project;
return project;
}
}
Three entity beans in an inheritance hierarchy.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "project")
public class Project
{
}
@Entity
@Table(name = "rf_project")
@Inheritance(strategy = InheritanceType.JOINED)
@PrimaryKeyJoinColumn(name = "id")
public class RfProject extends Project
{
}
@Entity
@Table(name = "rf_auth_project")
@Inheritance(strategy = InheritanceType.JOINED)
@PrimaryKeyJoinColumn(name = "id")
public class RfAuthProject extends RfProject
{
}