[jboss-user] [EJB 3.0] - can a entity be related to a superclass of a joined-inherita

goldfrog do-not-reply at jboss.com
Tue Oct 3 02:54:32 EDT 2006


my enivironment:
jboss 4.04 GA, jboss-EJB-3.0_RC9-FD
i use the ejb3 tutorial of joininheritance as the template . i did not chanage any code of Pet.java Cat.java Dog.java.i just add some functions to PetDao and PetDAOBean 
i write a entity, Decorate, referring to Pet. i can insert a entity of Decorate into the database but when i try to get out of the entities of Decorate from the database, some exception happens:


Decorate.java

package org.jboss.tutorial.joininheritance.bean;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Entity
public class Decorate implements java.io.Serializable{

	private int id;

	private String name;

	private Pet pet;

	public Decorate() {
		super();

	}
	
	@Id @GeneratedValue(strategy=GenerationType.AUTO)
	public int getId() {
		return id;
	}

	public String getName() {
		return name;
	}
	
	@OneToOne(fetch = FetchType.LAZY)
	public Pet getPet() {
		return pet;
	}

	public void setId(int id) {
		this.id = id;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setPet(Pet pet) {
		this.pet = pet;
	}
}

PetDAO.java
package org.jboss.tutorial.joininheritance.bean;

import java.util.Collection;
import java.util.List;

public interface PetDAO
{
   Dog createDog(String name, double weight, int bones);

   Cat createCat(String name, double weight, int lives);

   List findByWeight(double weight);
   
   Decorate createDecorate(String name,Pet pet);
   
   Collection getDecorate();
}

PetDAOBean.java

package org.jboss.tutorial.joininheritance.bean;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless
@Remote(PetDAO.class)
public class PetDAOBean implements PetDAO {
	@PersistenceContext
	private EntityManager manager;

	public Dog createDog(String name, double weight, int bones) {
		Dog dog = new Dog();
		dog.setName(name);
		dog.setWeight(weight);
		dog.setNumBones(bones);
		manager.persist(dog);
		return dog;
	}

	public Cat createCat(String name, double weight, int lives) {
		Cat cat = new Cat();
		cat.setName(name);
		cat.setWeight(weight);
		cat.setLives(lives);
		manager.persist(cat);
		return cat;
	}

	public List findByWeight(double weight) {
		return manager.createQuery(
				"select p from Pet p where p.weight < :weight").setParameter(
				"weight", weight).getResultList();
	}

	public Decorate createDecorate(String name, Pet pet) {
		Decorate dec = new Decorate();
		dec.setName(name);
		dec.setPet(pet);
		manager.persist(dec);
		return dec;
	}

	public Collection getDecorate() {
		Collection founds = new ArrayList();
		Query query = manager.createQuery("SELECT o FROM Decorate o");
		List list = query.getResultList();
		for (Object obj : list) {
			if (obj instanceof Decorate) {
				founds.add((Decorate) obj);
			}
		}
		return founds;
	}
}

Client.java
public class Client {
	public static void main(String[] args) throws Exception {
		InitialContext ctx = new InitialContext();
		PetDAO dao = (PetDAO) ctx.lookup("PetDAOBean/remote");

		Pet p1 = dao.createCat("Toonses", 15.0, 9);
		Pet p2 = dao.createCat("Sox", 10.0, 5);
		Pet p3 = dao.createDog("Winnie", 70.0, 5);
		Pet p4 = dao.createDog("Junior", 11.0, 1);
		Decorate d1 = dao.createDecorate("Test", p1);
		Decorate d2 = dao.createDecorate("Test2", p1);

		List l = dao.findByWeight(14.0);
		for (Object o : l) {
			System.out.println(((Pet) o).getName());
		}

		Collection founds = dao.getDecorate(); //exception throws here
		for (Decorate value : founds) {
			System.out.println(value.getName()); 
		}
	}
}

Cat.java

package org.jboss.tutorial.joininheritance.bean;

import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Cat extends Pet
{
   int lives;

   public int getLives()
   {
      return lives;
   }

   public void setLives(int lives)
   {
      this.lives = lives;
   }
}

Dog.java
package org.jboss.tutorial.joininheritance.bean;

import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Entity;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Dog extends Pet
{
   private int numBones;

   public int getNumBones()
   {
      return numBones;
   }

   public void setNumBones(int numBones)
   {
      this.numBones = numBones;
   }
}


run:
     [java] Sox
     [java] Junior
     [java] Exception in thread "main" java.lang.RuntimeException: org.jboss.tm.
JBossRollbackException: Unable to commit, tx=TransactionImpl:XidImpl[FormatId=25
7, GlobalId=xhh/21, BranchQual=, localId=21] status=STATUS_NO_TRANSACTION; - nes
ted throwable: (javax.persistence.PersistenceException: org.hibernate.HibernateE
xception: instance not of expected entity type: org.jboss.tutorial.joininheritan
ce.bean.Pet_$$_javassist_10 is not a: org.jboss.tutorial.joininheritance.bean.Pe
t)
     [java]     at org.jboss.aspects.tx.TxPolicy.handleEndTransactionException(T
xPolicy.java:198)
     [java]     at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:18
0)
     [java]     at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)

     [java]     at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxIntercep
tor.java:197)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropag
ationInterceptor.java:76)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(
StatelessInstanceInterceptor.java:62)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.aspects.security.AuthenticationInterceptor.invoke(A
uthenticationInterceptor.java:78)
     [java]     at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(
Ejb3AuthenticationInterceptor.java:131)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagatio
nInterceptor.java:47)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(As
ynchronousInterceptor.java:106)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(Sta
telessContainer.java:263)
     [java]     at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
     [java]     at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invok
e(AOPRemotingInvocationHandler.java:82)
     [java]     at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:82
8)
     [java]     at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:68
1)
     [java]     at org.jboss.remoting.transport.socket.ServerThread.processInvoc
ation(ServerThread.java:358)
     [java]     at org.jboss.remoting.transport.socket.ServerThread.dorun(Server
Thread.java:412)
     [java]     at org.jboss.remoting.transport.socket.ServerThread.run(ServerTh
read.java:239)
     [java] Caused by: org.jboss.tm.JBossRollbackException: Unable to commit, tx
=TransactionImpl:XidImpl[FormatId=257, GlobalId=xhh/21, BranchQual=, localId=21]
 status=STATUS_NO_TRANSACTION; - nested throwable: (javax.persistence.Persistenc
eException: org.hibernate.HibernateException: instance not of expected entity ty
pe: org.jboss.tutorial.joininheritance.bean.Pet_$$_javassist_10 is not a: org.jb
oss.tutorial.joininheritance.bean.Pet)
     [java]     at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:372)

     [java]     at org.jboss.tm.TxManager.commit(TxManager.java:240)
     [java]     at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:17
5)
     [java]     at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)

     [java]     at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxIntercep
tor.java:197)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropag
ationInterceptor.java:76)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(
StatelessInstanceInterceptor.java:62)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.aspects.security.AuthenticationInterceptor.invoke(A
uthenticationInterceptor.java:78)
     [java]     at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(
Ejb3AuthenticationInterceptor.java:131)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagatio
nInterceptor.java:47)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(As
ynchronousInterceptor.java:106)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(Sta
telessContainer.java:263)
     [java]     at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
     [java]     at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invok
e(AOPRemotingInvocationHandler.java:82)
     [java]     at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:82
8)
     [java]     at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:68
1)
     [java]     at org.jboss.remoting.transport.socket.ServerThread.processInvoc
ation(ServerThread.java:358)
     [java]     at org.jboss.remoting.transport.socket.ServerThread.dorun(Server
Thread.java:412)
     [java]     at org.jboss.remoting.transport.socket.ServerThread.run(ServerTh
read.java:239)
     [java]     at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInv
oker.java:190)
     [java]     at org.jboss.remoting.Client.invoke(Client.java:525)
     [java]     at org.jboss.remoting.Client.invoke(Client.java:488)
     [java]     at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(Inv
okeRemoteInterceptor.java:55)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(Cl
ientTxPropagationInterceptor.java:61)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.aspects.security.SecurityClientInterceptor.invoke(S
ecurityClientInterceptor.java:55)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInte
rceptor.java:77)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(Stateles
sRemoteProxy.java:102)
     [java]     at $Proxy0.getDecorate(Unknown Source)
     [java]     at org.jboss.tutorial.joininheritance.Client.Client.main(Client.
java:56)
     [java] Caused by: javax.persistence.PersistenceException: org.hibernate.Hib
ernateException: instance not of expected entity type: org.jboss.tutorial.joinin
heritance.bean.Pet_$$_javassist_10 is not a: org.jboss.tutorial.joininheritance.
bean.Pet
     [java]     at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceE
xception(AbstractEntityManagerImpl.java:641)
     [java]     at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletio
n(AbstractEntityManagerImpl.java:524)
     [java]     at org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionIm
pl.java:1491)
     [java]     at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.ja
va:1110)
     [java]     at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:324)

     [java]     at org.jboss.tm.TxManager.commit(TxManager.java:240)
     [java]     at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:17
5)
     [java]     at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)

     [java]     at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxIntercep
tor.java:197)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropag
ationInterceptor.java:76)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(
StatelessInstanceInterceptor.java:62)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.aspects.security.AuthenticationInterceptor.invoke(A
uthenticationInterceptor.java:78)
     [java]     at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(
Ejb3AuthenticationInterceptor.java:131)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagatio
nInterceptor.java:47)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(As
ynchronousInterceptor.java:106)
     [java]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInv
ocation.java:101)
     [java]     at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(Sta
telessContainer.java:263)
     [java]     at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
     [java]     at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invok
e(AOPRemotingInvocationHandler.java:82)
     [java]     at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:82
8)
     [java]     at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:68
1)
     [java]     at org.jboss.remoting.transport.socket.ServerThread.processInvoc
ation(ServerThread.java:358)
     [java]     at org.jboss.remoting.transport.socket.ServerThread.dorun(Server
Thread.java:412)
     [java]     at org.jboss.remoting.transport.socket.ServerThread.run(ServerTh
read.java:239)
     [java] Caused by: org.hibernate.HibernateException: instance not of expecte
d entity type: org.jboss.tutorial.joininheritance.bean.Pet_$$_javassist_10 is no
t a: org.jboss.tutorial.joininheritance.bean.Pet
     [java]     at org.hibernate.persister.entity.AbstractEntityPersister.getSub
classEntityPersister(AbstractEntityPersister.java:3568)
     [java]     at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl
.java:1347)
     [java]     at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java
:180)
     [java]     at org.hibernate.engine.CascadingAction$9.noCascade(CascadingAct
ion.java:347)
     [java]     at org.hibernate.engine.Cascade.cascade(Cascade.java:139)
     [java]     at org.hibernate.event.def.AbstractFlushingEventListener.cascade
OnFlush(AbstractFlushingEventListener.java:130)
     [java]     at org.hibernate.event.def.AbstractFlushingEventListener.prepare
EntityFlushes(AbstractFlushingEventListener.java:121)
     [java]     at org.hibernate.event.def.AbstractFlushingEventListener.flushEv
erythingToExecutions(AbstractFlushingEventListener.java:65)
     [java]     at org.hibernate.event.def.DefaultFlushEventListener.onFlush(Def
aultFlushEventListener.java:26)
     [java]     at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
     [java]     at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:
338)
     [java]     at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletio
n(AbstractEntityManagerImpl.java:515)
     [java]     ... 27 more
     [java] Java Result: 1

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3975673#3975673

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3975673



More information about the jboss-user mailing list