- How to implement self join in JPA?
- create table ServiceType (
- typeCode varchar(32),
- parentTypeCode varchar(32),
- description varchar(255),
- primary_key(typeCode))
- @Entity
- @Table(name="ServiceType")
- public class ServcieType implements java.io.Serializable {
- @Id
- protected String typeCode;
- protected String description;
- @ManyToOne
- protected ServiceType parent;
- @OneToMany
- protected Set<ServiceType> children;
- .... following is the setter and getter ...
- }
- }
- Exception in thread "main" javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not load an entity: [com.ifs.ejb.product.entity.ServiceType#PAYMENT]
- at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:77)
- at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
- at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:421)
- at org.jboss.ejb3.session.InvokableContextClassProxyHack._dynamicInvoke(InvokableContextClassProxyHack.java:53)
- at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:91)
- at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
- at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:891)
- at org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:744)
- at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:697)
- at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:524)
- at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:232)
- Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not load an entity: [com.ifs.ejb.product.entity.ServiceType#PAYMENT]
- at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
- at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:202)
- at org.jboss.jpa.tx.TransactionScopedEntityManager.find(TransactionScopedEntityManager.java:176)
- at com.ifs.ejb.product.service.ServiceManagerBean.fetchServiceType(ServiceManagerBean.java:27)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
- at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)
- at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)
- at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
- at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_1531239547.invoke(InvocationContextInterceptor_z_fillMethod_1531239547.java)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
- at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_1531239547.invoke(InvocationContextInterceptor_z_setup_1531239547.java)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
- at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:421)
- at org.jboss.ejb3.session.InvokableContextClassProxyHack._dynamicInvoke(InvokableContextClassProxyHack.java:53)
- at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:91)
- at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
- at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:891)
- at org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:744)
- at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:697)
- at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:524)
- at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:232)
- at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:211)
- at org.jboss.remoting.Client.invoke(Client.java:1724)
- at org.jboss.remoting.Client.invoke(Client.java:629)
- at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:60)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.security.client.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:65)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
- at $Proxy3.invoke(Unknown Source)
- at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
- at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
- at $Proxy2.fetchServiceType(Unknown Source)
- at com.ifs.ejb.product.test.ServiceTest.main(ServiceTest.java:51)
- at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:72)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.security.client.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:65)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
- at $Proxy3.invoke(Unknown Source)
- at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
- at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
- at $Proxy2.fetchServiceType(Unknown Source)
- at com.ifs.ejb.product.test.ServiceTest.main(ServiceTest.java:51)
- Caused by: org.hibernate.exception.SQLGrammarException: could not load an entity: [com.ifs.ejb.product.entity.ServiceType#PAYMENT]
- at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
- at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
- at org.hibernate.loader.Loader.loadEntity(Loader.java:1895)
- at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
- at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
- at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3072)
- at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434)
- at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415)
- at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
- at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
- at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
- at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
- at org.hibernate.impl.SessionImpl.get(SessionImpl.java:842)
- at org.hibernate.impl.SessionImpl.get(SessionImpl.java:835)
- at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:182)
- at org.jboss.jpa.tx.TransactionScopedEntityManager.find(TransactionScopedEntityManager.java:176)
- at com.ifs.ejb.product.service.ServiceManagerBean.fetchServiceType(ServiceManagerBean.java:27)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
- at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)
- at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)
- at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
- at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_1531239547.invoke(InvocationContextInterceptor_z_fillMethod_1531239547.java)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
- at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_1531239547.invoke(InvocationContextInterceptor_z_setup_1531239547.java)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
- at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
- at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
- at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:421)
- at org.jboss.ejb3.session.InvokableContextClassProxyHack._dynamicInvoke(InvokableContextClassProxyHack.java:53)
- at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:91)
- at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
- at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:891)
- at org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:744)
- at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:697)
- at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:524)
- at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:232)
- Caused by: org.postgresql.util.PSQLException: 错误: 字段 servicetyp0_.parent_service_type_id 不存在
- at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1591)
- at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1340)
- at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
- at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:471)
- at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:373)
- at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:258)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.postgresql.ds.common.PooledConnectionImpl$StatementHandler.invoke(PooledConnectionImpl.java:458)
- at $Proxy326.executeQuery(Unknown Source)
- at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:342)
- at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
- at org.hibernate.loader.Loader.getResultSet(Loader.java:1808)
- at org.hibernate.loader.Loader.doQuery(Loader.java:697)
- at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
- at org.hibernate.loader.Loader.loadEntity(Loader.java:1881)
- ... 69 more
- @ManyToOne
- @JoinColumn(name = "parentTypeCode")
- protected ServiceType parent;
- @OneToMany(mappedBy = "parent")
- protected Set<ServiceType> children;