0

JPAで問題に直面しています。新しいユーザーを挿入し、同時にユーザーとの関係をセットアップする必要があるという問題があります。

==> データベースの設計は次のとおりです。

  • システムユーザー:

ユーザー名(pk) パスワード

  • システム分類グループ:

SystemClassifiedGroupName ユーザー名

==> EJBで次のロジックを書きました

@Override
public void addUser(SYSTEM_CLASSIFIED_USER_GROUPS systemClassifiedUserGroup,
        String userName,
        String password,
        String emailID,
        String secretQuestion,
        String secretAnswer,
        String firstName,
        String lastName,
        String profilePictureURL,
        Date birthDate,
        String address1,
        String address2,
        String cityName,
        String zipCode,
        short stateID,
        short countryID,
        String officePhoneNumber) {

    FeedBack objFeedBack = null;
    String methodName = CLASS_NAME + ".addUser";

    try {

        SystemUsers objSystemUser=new SystemUsers(userName, password, emailID, firstName, lastName, address1, cityName);
        SystemClassifiedUserGroups tempGrp=new SystemClassifiedUserGroups(systemClassifiedUserGroup.name());

        States objState = new States(stateID);
        Countries objCountry = new Countries(countryID);
        objSystemUser.setSecretQuestion(secretQuestion);
        objSystemUser.setSecretAnswer(secretAnswer);
        objSystemUser.setProfilePictureURL(profilePictureURL);
        objSystemUser.setBirthDate(birthDate);
        objSystemUser.setAddress2(address2);
        objSystemUser.setStateID(objState);
        objSystemUser.setCountryID(objCountry);
        objSystemUser.setOfficePhoneNumber(officePhoneNumber);
        objSystemUser.setZipCode(zipCode);

        ArrayList<SystemUsers> lstUser = new ArrayList<SystemUsers>();
        lstUser.add(objSystemUser);
        tempGrp.setUserName(objSystemUser);
        tempGrp.setSystemClassifiedGroupName(systemClassifiedUserGroup.name());

        em.persist(tempGrp);

        em.persist(objSystemUser);

    } catch (Exception ex) {

        ex.printStackTrace();
    }
}

==>そして、次のようにメソッドを呼び出します:

asr.addUser(SYSTEM_CLASSIFIED_USER_GROUPS.ADMIN, "raj", "pass", "abc@yahoo.com", "Color", "purple", "Raj", "Champaneriya", "abj.jpg", new Date() 、「jolly1」、「jolly2」、「surat」、「395007」、(短い) 1、(短い) 1、「3201708」);

==>しかし、グラスフィッシュコンソールで次の例外が発生しました

SEVERE: java.lang.IllegalArgumentException: Object: BusinessFacade.Entities.SystemUsers[ userName=raj ] is not a known entity type.
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4158)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:440)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:269)
at BusinessFacade.User.UserServices.addUser(UserServices.java:95)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5366)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
at sun.reflect.GeneratedMethodAccessor119.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5338)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5326)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
at $Proxy273.addUser(Unknown Source)
at BusinessFacade.AdminServices.addUser(AdminServices.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5366)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
at sun.reflect.GeneratedMethodAccessor119.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5338)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5326)
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:206)
at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:79)
at $Proxy271.addUser(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:241)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:227)
at BusinessFacade.__AdminServicesRemote_Remote_DynamicStub.addUser(BusinessFacade/__AdminServicesRemote_Remote_DynamicStub.java)
at BusinessFacade._AdminServicesRemote_Wrapper.addUser(BusinessFacade/_AdminServicesRemote_Wrapper.java)
at Admin.TestServlet.processRequest(TestServlet.java:35)
at Admin.TestServlet.doGet(TestServlet.java:74)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.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:636)

前もって感謝します

4

1 に答える 1

1

エラーが発生したコード内の正確な行を表示してください。em.persist(tmpGrp) を呼び出した時点だと思います。最初にユーザーを保存する必要があります。そうしないと、EntityManager がユーザーのインスタンスを見つけることができなくなります。または、グループ クラスに以下を追加して、グループ内でユーザーを管理する方法を指定する必要があります。

@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
SystemUsers userName;
于 2012-05-08T09:07:25.837 に答える