我正在使用 Hibernate 作为 ORM 处理 JPA数据访问层的开发。
我应该管理一个关系模式,如下所示:
Hibernate 生成了以下实体:
UserAccount
Workgroup
WorkgroupPrivilege
UserAccountHasWorkgroup
UserAccountHasWorkgroupId
(EmbeddedId
)代码可以 Github Gist : https://gist.github.com/vdenotaris/5b50188fe11b6e5439d8
现在,我正在尝试将成员(UserAccount
)添加到Workgroup
,如下所示:
public void addMembership(final Long workgroupId,
final UserAccount newMember,
final WorkgroupPrivilege workgroupPrivilege,
final UserAccount approvedBy) {
Workgroup workgroup = super.findById(workgroupId);
Set<UserAccountHasWorkgroup> memberships = workgroup.getUserAccountHasWorkgroups();
System.out.println("Memberhsips: <" + memberships.size() + ">");
UserAccountHasWorkgroup membership = new UserAccountHasWorkgroup();
UserAccountHasWorkgroupId id = new UserAccountHasWorkgroupId();
id.setUserAccountId(newMember.getId());
id.setWorkgroupId(workgroupId);
membership.setId(id);
membership.setWorkgroupPrivilege(workgroupPrivilege);
membership.setUserAccountByApprovedByUserAccountId(approvedBy);
memberships.add(membership);
workgroup.setUserAccountHasWorkgroups(memberships);
jpaEntityManager().update(workgroup);
}
但是它返回了以下错误:
17:02:18,235 ERROR [org.jboss.ejb3.invocation] (http--127.0.0.1-8080-2) JBAS014134: EJB Invocation failed on component WorkgroupDAO for method public void it.prisma.dal.dao.accounting.WorkgroupDAO.addMembership(java.lang.Long,it.prisma.dal.entities.accounting.UserAccount,it.prisma.dal.entities.accounting.WorkgroupPrivilege,it.prisma.dal.entities.accounting.UserAccount): javax.ejb.EJBException: javax.persistence.EntityNotFoundException: Unable to find it.prisma.dal.entities.accounting.UserAccountHasWorkgroup with id it.prisma.dal.entities.accounting.UserAccountHasWorkgroupId@513a85eb
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:166) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:230) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:304) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:190) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:32) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:173) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:72) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final]
at it.prisma.dal.dao.accounting.WorkgroupDAO$$$view7.addMembership(Unknown Source) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_51]
我做错了什么?我该如何解决这个错误?