簡體   English   中英

休眠嵌套屬性別名

[英]Hibernate Nested Properties Alias

我有這個課:

@Entity
@Table(name = "TOPUP_MESSAGE")
public class ReportFee {
  //... ID & Other Properties
  @ManyToOne
  @JoinColumn(name="CONTRACT_ID")
  private ContractDetail contractDetail;
  //GETTERS AND SETTERS
}

和ContractDetail類是這樣的:

@Entity
@Table(name = "CONTRACT_DETAIL")
public class ContractDetail {

  //... ID & Other Properties
  @ManyToOne
  @JoinColumn(name = "CONTRACT_ID")
  private Contract contract;
  //GETTERS AND SETTERS
}

我的合同類是這樣的:

@Entity
@Table(name = "CONTRACT")
public class Contract implements {

  //... ID & Other Properties
  @ManyToOne
  @JoinColumn(name = "OPERATOR_ID")
  private Operator operator;
  //GETTERS AND SETTERS
}

我這樣定義了別名,但這是錯誤的:

Session session = (Session)this.em.getDelegate();
Criteria crit = session.createCriteria(getEntityClass());
crit = crit.createAlias("contractDetail", "cd", JoinType.LEFT_OUTER_JOIN);
crit = crit.createAlias("contract", "c", JoinType.LEFT_OUTER_JOIN);
crit = crit.createAlias("operator", "op", JoinType.LEFT_OUTER_JOIN);

Criterion c= Restrictions.eq("cd.cd.op", operator);

crit.add(c);

List result = crit.list();

但不幸的是我得到這個錯誤:

org.hibernate.QueryException:無法解析屬性:org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)處的x.be.ReportFee合同,org.hibernate.persister.entity.AbstractPropertyMapping.toType (AbstractPropertyMapping.java:77),位於org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1809),位於org.hibernate.loader.criteria.EntityCriteriaInfoProvider.getType(EntityCriteriaInfoProvider.java:57),位於org.hibernate。 org.hibernate.loader.criteria.CriteriaQueryTranslator.createCriteriaEntityNameMap(CriteriaQueryTranslator.java:230)處的loader.criteria.CriteriaQueryTranslator.getPathInfo(CriteriaQueryTranslator.java:251)在org.hibernate.loader.criteria.CriteriaQueryTranslator。(CriteriaQueryTranslator.java: )在org.hibernate.internal.CriteriaImpl.list(Criter)的org.hibernate.internal.SessionImpl.list(SessionImpl.java:1464)在org.hibernate.loader.criteria.CriteriaLoader。(CriteriaLoader.java:84) iaImpl.java:374)位於x.findByCriteria(GenericJpaDao.java:195)位於x.ReportFeeSb.getAllValidReportFees(ReportFeeSb.java:54)位於sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)位於sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在com.bea.core.repackaged.springframework上的java.lang.reflect.Method.invoke(Method.java:597)。 com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)處的com.bea.core.repackaged.springframework處的aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)。位於com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)的com.bea.core.repackaged.springframework的aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)。 aop.support.DelegatingIntrod 在com.bea.core.repackaged.springframework.jee.spi上的com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)上的uctionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)。 weblogic.ejb.container.injection.EnvironmentInterceptorCallbackImpl.callback(EnvironmentInterceptorCallbackImpl.java:54)處的MethodInvocationVisitorImpl.visit(MethodInvocationVisitorImpl.java:37)在com.bea.core.Interpackaged.springframework.jee.spi.Environment java:50)位於com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)位於com.bea.core.repackaged.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor。 java:89)在com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)在com.bea.core.repackaged.springframework.aop.support com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)在com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)在com.bea.core.repackaged.springframework。在com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)處的.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)在$ Proxy393.getAllValidReportFees(36)處位於x.ReportFeeSi_ __WL_invoke(未知源)在weblogic.ejb.container.internal.SessionRemoteMethodInvoker.invoke(SessionRemoteMethodInvoker.java:40)在x.ReportFeeSi_kf36yv_ReportFeeSiImpl.getAllValidReportFees(未知源)在x.ReportFeeSi_kf36 .serverRequest.sendReceive(ServerRequest.java:174)位於weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:345) 在weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:259)處在x.ReportFeeSi_kf36yv_ReportFeeSiImpl_1034_WLStub.getAllValidReportFees(未知源)在sun.reflect.NativeMethod.AccessIv。 java:39)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在java.lang.reflect.Method.invoke(Method.java:597)在weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy .java:85),位於$ Proxy392.getAllValidReportFees(未知源),位於sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法),位於sun.reflect.NativeMethodAccessorImpl.invoke(本地方法),位於sun.reflect.DelegatingMethodAccessorImpl.invoke(本地方法)在$ Proxy391.getAllValidReportFees(Unknown Source)在$ Proxy391.x.invoke(SlsbDynamicDelegate.java:66)在java.lang.reflect.Method.invoke(Method.java:597)處的DelegatingMethodAccessorImpl.java:25)在xxx.ReportFe eBean.performAction(ReportFeeBean.java:61)位於sun.reflect.NativeMethodAccessorImpl.invoke0(原生方法)位於sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)位於sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl。 25)位於com.sun.el.parser.AstValue.invoke處java.lang.reflect.Method.invoke(Method.java:597)(com.sun.el.MethodExpressionImpl.invoke(未知源) com.sun.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)上的com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)在com.sun.faces.application.ActionListenerImpl.processAction(位於javax.faces.component.UICommand.broadcast(UICommand.java:315)處的ActionListenerImpl.java:102)(位於javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)處的javax.faces.component.UIViewRoot.processApplication (UIViewRoot.java:1259)位於com.sun.faces.lifecycle.InvokeApplicationPhase.exec 在com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)在com.sun.faces.lifecycle.Lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)處ute(InvokeApplicationPhase.java:81)位於weblogic.servlet.internal.StubSecurityHelper $ ServletServiceAction.run(StubSecurityHelper.java:227)處的weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)處的.webapp.FacesServlet.service(FacesServlet.java:593)位於weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)處的weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)位於weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)在weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)在weblogic.servlet.internal.WebAppServletContext $ ServletInvocationAction.wrapRun(WebAppServletContext.java) :3715),網址為weblogic.servlet.internal.WebAppServletContext $ ServletInvocationA weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)上的weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)上的ction.run(WebAppServletContext.java:3681)位於weblogic上的.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)(位於Weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)位於weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)。 weblogic.work.ExecuteThread.run(ExecuteThread.java:176)上的work.ExecuteThread.execute(ExecuteThread.java:207)

這是創建類的方式:

----ReportFee (private ContractDetail contractDetail)

       |

        ------ ContractDetail (private Contract contract)

                      |

                       -------- Contract (private Contract contract)

我要如何解決這個問題,提前謝謝???

當我定義嵌套層次結構時,我解決了這個問題:

Session session = (Session)this.em.getDelegate();
Criteria crit = session.createCriteria(getEntityClass());
crit = crit.createAlias("contractDetail", "cd", JoinType.LEFT_OUTER_JOIN);
crit = crit.createAlias("cd.contract", "c", JoinType.LEFT_OUTER_JOIN);

Criterion criterion= Restrictions.eq("c.operator", operator);

crit.add(c);

List result = crit.list();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM