实体bean(十一)复合主键

package com.persia.entity;

import javax.persistence.Embeddable;

@Embeddable
public class Name implements java.io.Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -7695123567614604550L;
	/**
	 * 
	 */
//	private static final long serialVersionUID = 1L;
	private String first;
	private String last;
	
	public Name(){}
	
	public Name(String first,String last){
		this.first=first;
		this.last=last;
	}

	public int hashcode(){
		return (first+last).hashCode();
	}
	
	public boolean equals(Object object){
	   if(this==object)
		   return true;
	   if(object==null)
		   return false;
	   if(!(object instanceof Name))
		   return false;
	   Name name=(Name)object;
	   if((name.first.equals(first))&& (name.last.equals(last)))
		   return true;
	   else
		   return false;
	}
	
	
	public String getFirst() {
		return first;
	}

	public void setFirst(String first) {
		this.first = first;
	}

	public String getLast() {
		return last;
	}

	public void setLast(String last) {
		this.last = last;
	}

	
}
 
 

学生:

package com.persia.entity;

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name="student")
public class Student implements java.io.Serializable{
   /**
	 * 
	 */
	private static final long serialVersionUID = 5609072904523058853L;
/**
	 * 
	 */
	//private static final long serialVersionUID = 1L;
private Name name;
   private String grade;
   private String email;
   
   public Student(){}
   
   public Student(Name name,String grade,String email){
	   
	   super();
	   this.name=name;
	   this.grade=grade;
	   this.email=email;
   }

   @EmbeddedId
public Name getName() {
	return name;
}

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

public String getGrade() {
	return grade;
}

public void setGrade(String grade) {
	this.grade = grade;
}

public String getEmail() {
	return email;
}

public void setEmail(String email) {
	this.email = email;
}
   
   
}

 

DAO:

package com.persia.entity;

import java.util.List;

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

@Stateless
@Remote({StudentDAO.class})
public class StudentDAOBean implements StudentDAO {
	
	@PersistenceContext
	protected EntityManager em;

	@Override
	public void create(String first, String last, String grade, String email) {
		Student stu=new Student();
		stu.setName(new Name(first,last));
		stu.setGrade(grade);
		stu.setEmail(email);
		em.persist(stu);

	}

	@Override
	public Student find(Name name) {
		Student s=em.find(Student.class, name);
		System.out.println("find的是否为空???"+(s==null));
		return s;
	}

	@Override
	public List findByFirstName(String name) {
		return em.createQuery("from student s where s.name.first=:name").setParameter("name", name).getResultList();
		
	}

	@Override
	public List findByLastName(String name) {
		return em.createQuery("from student s where s.name.last=:name").setParameter("name", name).getResultList();
	}

}

 

测试:

package com.persia.ejb;

import java.util.Properties;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.persia.entity.Student;
import com.persia.entity.StudentDAO;

public class Test {

	/**
	 * @param args
	 * @throws NamingException 
	 */
	public static void main(String[] args) throws NamingException {
		 Properties props=new Properties();
	      props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
	      props.setProperty("java.naming.provider.url","localhost:1099");
	      props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming");
	      
	      InitialContext ctx=new InitialContext(props);
	      try{
	        StudentDAO dao=(StudentDAO)ctx.lookup("StudentDAOBean/remote");    
	       dao.create("ma","xiaolong","8","maxiaolong@163.com");
	       dao.create("ma","dalong","8","madalong@163.com");
	        com.persia.entity.Name n=new com.persia.entity.Name("ma","xiaolong");
	        Student s=dao.find(n);
	        System.out.println("is s null???"+(s==null));
	        System.out.println(s.getName().getFirst()+" "+s.getName().getLast()+" "+s.getEmail());
	       
	        
	      }catch(Exception e){
	        e.printStackTrace();
	      }

	}

}

 

问题:

  可以正常插入,但到查询的时候,出现问题:

java.lang.reflect.UndeclaredThrowableException
	at $Proxy0.find(Unknown Source)
	at com.persia.ejb.Test.main(Test.java:29)
Caused by: java.rmi.MarshalException: Failed to communicate.  Problem during marshalling/unmarshalling; nested exception is: 
	java.io.InvalidClassException: com.persia.entity.Student; com.persia.entity.Student; class invalid for deserialization
	at org.jboss.remoting.transport.socket.SocketClientInvoker.handleException(SocketClientInvoker.java:122)
	at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:646)
	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)
	... 2 more
Caused by: java.io.InvalidClassException: com.persia.entity.Student; com.persia.entity.Student; class invalid for deserialization
	at java.io.ObjectStreamClass.checkDeserialize(ObjectStreamClass.java:713)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1733)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
	at org.jboss.aop.joinpoint.InvocationResponse.readExternal(InvocationResponse.java:122)
	at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
	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 $Proxy0.find(Unknown Source)
	at com.persia.ejb.Test.main(Test.java:29)
	at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74)
	... 10 more
Caused by: java.io.InvalidClassException: com.persia.entity.Student; class invalid for deserialization
	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:587)
	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
	at org.jboss.aop.joinpoint.InvocationResponse.readExternal(InvocationResponse.java:122)
	at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
	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)
	... 10 more

转载于:https://www.cnblogs.com/cxccbv/archive/2009/01/18/1377991.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值