实体bean内部的实体bean集

时间:2015-12-13 11:48:24

标签: java jboss ejb

我是初学者,目前我正在使用EJB,Jboss 7.1和mySQL。

但实际上我遇到了问题。

我想用实体bean创建以下星座:

1)实体bean

  • 一个mac地址(String)
  • 类型地址(String)
  • a si(String)
  • 一组数据

2)实体bean

  • x values(long)
  • y values(double)

这意味着,实体bean 1)必须有一组2)的实体bean。

所以我实现了1)如下

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


private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
private String mac;
private String type;
private String si;
private set<DataBean> data;
...

DataBean是一个包含x和y值的实体bean。

当我启动服务器时,我遇到了很多错误

[org.hibernate.ejb.Ejb3Configuration] (MSC service thread 1-8) HHH000059: Defining hibernate.transaction.flush_before_completion=true ignored in HEM
12:34:36,777 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC00001: Failed to start service jboss.persistenceunit ....

当我删除专线“set data;”时然后它工作。所以很可能使用set的方法是完全错误的。

你能举个简单的例子说明如何实现上面描述的星座吗?

非常感谢! 祝你有愉快的一天!

BR

1 个答案:

答案 0 :(得分:0)

虽然您发布的代码和日志摘录可能不足以准确识别问题,并假设private set<DataBean> data;实际上是private Set<DataBean> data;(请注意{{1}中的大写“S” }),您还需要使用@OneToMany注释Set属性,并确保data类也正确映射(例如,使用DataBean)。

更一般地说,以下是JPA实体类的必备条件(来自The Java EE Tutorial):

  

该类必须使用javax.persistence.Entity进行注释   注释

     

该类必须具有公共或受保护的无参数构造函数。   该类可能有其他构造函数。

     

不得将该类声明为final。没有方法或持久性   实例变量必须声明为final。

     

如果实体实例按值传递为分离对象,例如   通过会话bean的远程业务接口,该类必须   实现Serializable接口。

     

实体可以扩展实体和非实体类,以及非实体   类可以扩展实体类。

     

持久化实例变量必须声明为private,protected或   package-private,只能由实体直接访问   阶级的方法。客户必须通过访问实体的状态   访问者或商业方法。