我正在尝试在 servlet 和调用时创建和持久化实体
public void create(T entity) {
getEntityManager().persist(entity);
}
来自servlet,这是在AbstractFacade 中为所有EJB 生成的方法,我得到EJBException。现在,我正在考虑使用此方法在无状态 EJB 中创建和持久化实体并从 servlet 调用它
public boolean createUser(JavaBean jb){}
.
这是个好主意吗?创建和持久化实体(即创建用户帐户)的最佳方式是什么?
谢谢你的帮助。
这是问题所在。我想在数据库中的两个表中创建记录,成员详细信息和地址。他们是一对一的关系。该关系尚未由数据库中的外键强制执行。两个表都有对应的实体类,实体类 Address 有 Embeddable 类 AddressPK 表示其复合主键。一对一关系仅在实体@ JoinColumn(name = "MEMBER_ID")
中通过地址和成员详细信息执行@OneToOne(mappedBy = "memberId", cascade = CascadeType.ALL)
。现在,我从 JSP 表单中获取数据,并在另一个 JSP 中设置了 JavaBean。Servlet 创建实体并调用注入的 EJB 来持久化它们,如下所示:
//get MemberBean from session object
MemberBean member = (MemberBean) request.getSession().getAttribute("user");
//create relevant entities and set attributes of entity classes
MemberDetails aMember = new MemberDetails("M3", firstName, middleName, lastName, dob, phoneNo,
member.getEmail(), gender, industryPosition, "Basic", musicInterests);
AddressPK addressId = new AddressPK(houseNo, postCode);
Address anAddress = new Address(addressId, street, county, town, country, aMember);
aMember.setAddress(anAddress);
if (memberDetails.find(aMember.getMemberId()) == null) {
//address.create(anAddress);
memberDetails.create(aMember);
}
else
{ System.out.println("User M3 Exists");}
//tests
memberDetails.displayMembers();
RequestDispatcher disp = request.getRequestDispatcher("WEB-INF/jsp/accounttype.jsp");
disp.forward(request, response);
我创建了普通的 Java 应用程序客户端,并使用显式事务插入了这些详细信息,并且它起作用了。当注释掉地址并只保留成员详细信息时,它也可以工作。
这是我尝试将 MemberDetails 和 Address 一起插入时遇到的异常。
在 com.sun.grizzly 执行(DefaultProtocolChain.java:90)在 com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 在 com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 在 com.sun.grizzly .SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 在 com.sun.grizzly.ContextTask.run(ContextTask.java:71) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 在com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) 原因:javax.validation.UnexpectedTypeException: HV000030: 没有验证器可能找到类型:entities.MemberDetails。... doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util .AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) 引起作者:javax.validation.UnexpectedTypeException:HV000030:找不到类型的验证器:entities.MemberDetails。... doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util .AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) 引起作者:javax.validation.UnexpectedTypeException:HV000030:找不到类型的验证器:entities.MemberDetails。... AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) 原因:javax.validation.UnexpectedTypeException:HV000030:找不到类型的验证器:entities.MemberDetails。... AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) 原因:javax.validation.UnexpectedTypeException:HV000030:找不到类型的验证器:entities.MemberDetails。...