实体 bean 查询 异常,请高手帮个忙

0oops 2009-05-18 03:30:10
环境: JDK1.6 Eclipse3.4 JBOSS5.0
我建的普通的java 工程,将 jboss_home/client 下面的包全部导入

表 company(公司) , employee(员工) 一对多关系

实体 Company

@Entity
@Table(name = "Company")
public class Company implements Serializable {

/**
*
*/
private static final long serialVersionUID = -6665253756580566900L;

private Integer id;
private String name;

private Set<Employee> emps = new HashSet<Employee>();

public Company() {
super();
}

public Company(String name) {
super();
this.name = name;
}

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

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

@Column(name = "Name")
public String getName() {
return name;
}

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

@Override
public String toString() {
// TODO Auto-generated method stub
return "name:" + this.name;
}

@OneToMany(mappedBy = "company", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
public Set<Employee> getEmps() {
return emps;
}

public void setEmps(Set<Employee> emps) {
this.emps = emps;
}

}




实体 Employee


@Entity
@Table(name = "Employee")
public class Employee implements Serializable {

/**
*
*/
private static final long serialVersionUID = 6108196233317566600L;

private Integer id;
private String name;

private Company company;

public Employee() {
super();
}

public Employee(String name) {
super();
this.name = name;
}

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

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

@Column(name = "Name")
public String getName() {
return name;
}

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

@ManyToOne
@JoinColumn(name = "CID")
public Company getCompany() {
return company;
}

public void setCompany(Company company) {
this.company = company;
}

@Override
public String toString() {
// TODO Auto-generated method stub
return "name:" + this.name;
}

}



会话Bean

@Stateless
@Remote(CompanyManager.class)
public class CompanyManagerBean implements CompanyManager {

@PersistenceContext(unitName = "vod")
private EntityManager em;

@Override
public Company getCompanyById(Integer id) {
Company com = em.find(Company.class, id);
com.getEmps().size();
return com;
}

}


客户端
try {
CompanyManager cm = (CompanyManager) ctx
.lookup("vod-ejb-app/CompanyManagerBean/remote");


Company company = cm.getCompanyById(5);
System.out.println(com.getId());

} catch (Exception e) {
e.printStackTrace();
}


数据库有记录
报异常如下:

java.lang.reflect.UndeclaredThrowableException
at $Proxy7.getCompanyById(Unknown Source)
at junit.ejb.test.EJBTest.testTest(EJBTest.java:105)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.ClassNotFoundException: org.hibernate.collection.PersistentSet


补充说明
1. 数据库有记录
2. 经调试,在会话Bean 里面,查出来的com 不为null, 并且里面包含几个 Employee 对象
3. 如果会话bean 不返回值到客户端,就在里面直接用 com 对象,没有问题,一返回就报错
4. 如果把com 里面的 Employee 对象清除,就OK,可以自常返回,不报错,
这样写: Company com = em.find(Company.class, id);
com.setEmps(null);
return com;
5. 将 Hibernate3.jar 包放在 JBOSS_HOME/server/default/lib 里面,一样报错
6. 添加,修改,删除没有问题


我弄了好久,整不明白什么问题,很急,请高手帮个忙,十分感谢

...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
薛总 2009-12-24
  • 打赏
  • 举报
回复
我的这是这个问题..不知道怎么解决了.
s321h321 2009-11-17
  • 打赏
  • 举报
回复
兄弟你后三个包,在Jboss和Tomcat中我都怎么找不到?
0oops 2009-05-18
  • 打赏
  • 举报
回复
问题解决了:
客户端加入这几个包就好了:
jbossall-client.jar,
jboss-aop-jdk50.jar,
jboss-aspect-library-jdk50.jar,
jboss-ejb3-client.jar

感谢你的帮助,分给你
0oops 2009-05-18
  • 打赏
  • 举报
回复
期待高手的帮助
0oops 2009-05-18
  • 打赏
  • 举报
回复
我感觉也是,可是 一对多双向关联 不就是这样配置的吗?
一洽客服系统 2009-05-18
  • 打赏
  • 举报
回复
你这是不是死循环了 你company里面的set存的是employee 而employee里面又有company的对象 这不是死循环码

比如 公司 1 员工 2 3 4

1 -> 2 3 4

2 - > 1 -> 2 3 4 ...........

67,542

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧