我是初学者,目前我正在使用EJB,Jboss 7.1和mySQL。
但实际上我遇到了问题。
我想用实体bean创建以下星座:
1)实体bean
2)实体bean
这意味着,实体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
答案 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,只能由实体直接访问 阶级的方法。客户必须通过访问实体的状态 访问者或商业方法。