[jboss-user] [EJB 3.0] - ManyToOne lazy initialization

siamak82 do-not-reply at jboss.com
Fri Sep 26 03:51:08 EDT 2008


Hi

I've been struggling with this problem a couple of days and still haven't been able to find any solutions. It's about two simple entities that have a ManyToOne relationship. The following exception is thrown when the owning entity is looked up:

  | java.lang.NoClassDefFoundError: Lorg/hibernate/type/AbstractComponentType;
  | 	at java.lang.Class.getDeclaredFields0(Native Method)
  | 	at java.lang.Class.privateGetDeclaredFields(Class.java:2259)
  | 	at java.lang.Class.getDeclaredField(Class.java:1852)
  | 	at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1582)
  | 	at java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:52)
  | 	at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:408)
  | 	at java.security.AccessController.doPrivileged(Native Method)
  | 	at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:400)
  | 	at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:297)
  | 	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:531)
  | 	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1552)
  | 	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
  | 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  | 	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
  | 	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
  | 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  | 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
  | 	at org.jboss.aop.joinpoint.InvocationResponse.readExternal(InvocationResponse.java:122)
  | 	at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1755)
  | 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1717)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  | 	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
  | 	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
  | 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  | 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
  | 	at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:239)
  | 	at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:133)
  | 	at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:120)
  | 	at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:957)
  | 	at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:586)
  | 	at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
  | 	at org.jboss.remoting.Client.invoke(Client.java:1634)
  | 	at org.jboss.remoting.Client.invoke(Client.java:548)
  | 	at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
  | 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  | 	at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
  | 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  | 	at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
  | 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  | 	at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
  | 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  | 	at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
  | 	at $Proxy13.get(Unknown Source)
  | 	at com.lab.service.LabTest.testGetAnimal(LabTest.java:55)
  | 

Here are the entities involved:



  | @Entity
  | @Table(name = "ANIMAL")
  | public class Animal implements Serializable {
  | 	private long id;
  | 
  | 	private Farm farm;
  | 	
  | 	@Id
  | 	@GeneratedValue(strategy = GenerationType.IDENTITY)
  | 	@Column(name = "ID")
  | 	public long getId() {
  | 		return id;
  | 	}
  | 
  | 	public void setId(long id) {
  | 		this.id = id;
  | 	}
  | 
  | 	@ManyToOne(fetch = FetchType.LAZY)
  | 	@JoinColumn(name="FARM_ID")
  | 	public Farm getFarm() {
  | 		return farm;
  | 	}
  | 
  | 	public void setFarm(Farm farm) {
  | 		this.farm = farm;
  | 	}
  | }
  | 


  | @Entity
  | @Table(name = "FARM")
  | public class Farm implements Serializable {
  | 	private long id;
  | 	
  | 	@Id
  | 	@GeneratedValue(strategy = GenerationType.IDENTITY)
  | 	@Column(name = "ID")
  | 	public long getId() {
  | 		return id;
  | 	}
  | 
  | 	public void setId(long id) {
  | 		this.id = id;
  | 	}
  | }
  | 

An the test case simply looks up the entity through EntityManager:

  | 	@PersistenceContext
  | 	protected EntityManager em;
  | 
  | 	public <T> T get(Class<T> klass, long id) {
  | 		return em.find(klass, id);
  | 	}
  | 

The strangest thing is that there are very few people ran into this problem. For what it's worth, the correct lookup query - considering being lazy - comes up in the hibernate logs:

  | select animal0_.ID as ID75_0_, animal0_.FARM_ID as FARM2_75_0_ from ANIMAL animal0_ where animal0_.ID=?
  | 

I appreciate any ideas on this.




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

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



More information about the jboss-user mailing list