>  SELECT tbl FROM CreditAccountDetailTbl tbl WHERE prodAcctTypTbl.prodTypCd in
>  ('CPCC', 'CCC') and tbl.id.apcntId = :apcntId

That's a really crappy error. I think you want that to read:

SELECT tbl FROM CreditAccountDetailTbl tbl WHERE
tbl.prodAcctTypTbl.prodTypCd in ('CPCC', 'CCC') and tbl.id.apcntId =
:apcntId

Notice that I added the 'tbl.' prefix in the first bit of the WHERE clause.

-Patrick

On Fri, Feb 29, 2008 at 10:44 AM, Ronald R. DiFrango
<[EMAIL PROTECTED]> wrote:
> All,
>
>  This is another snag I hit when moving over to OpenJPA, I have the following
>  named query:
>
>  SELECT tbl FROM CreditAccountDetailTbl tbl WHERE prodAcctTypTbl.prodTypCd in
>  ('CPCC', 'CCC') and tbl.id.apcntId = :apcntId
>
>  When I attempt to execute it I get the following error:
>
>  <openjpa-1.0.2-r420667:627158 nonfatal user error>
>  org.apache.openjpa.persistence.ArgumentException: An error occurred while
>  parsing the query filter "SELECT tbl FROM CreditAccountDetailTbl tbl WHERE
>  prodAcctTypTbl.prodTypCd in ('CPCC', 'CCC') and tbl.id.apcntId = :apcntId".
>  Error message: Attempt to query field "prodAcctTypTbl.prodTypCd" from
>  non-entity class "null".
>     at
>  org.apache.openjpa.kernel.exps.AbstractExpressionBuilder.parseException(
>  AbstractExpressionBuilder.java:118)
>     at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getPath(
>  JPQLExpressionBuilder.java:1294)
>     at
>  org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getPathOrConstant(
>  JPQLExpressionBuilder.java:1260)
>     at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.eval(
>  JPQLExpressionBuilder.java:858)
>     at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getValue(
>  JPQLExpressionBuilder.java:1354)
>     at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getValue(
>  JPQLExpressionBuilder.java:1340)
>     at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.eval(
>  JPQLExpressionBuilder.java:824)
>     at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getExpression(
>  JPQLExpressionBuilder.java:1331)
>     at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.eval(
>  JPQLExpressionBuilder.java:747)
>     at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getExpression(
>  JPQLExpressionBuilder.java:1331)
>     at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.eval(
>  JPQLExpressionBuilder.java:701)
>     at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.evalWhereClause(
>  JPQLExpressionBuilder.java:476)
>     at
>  org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getQueryExpressions(
>  JPQLExpressionBuilder.java:264)
>     at org.apache.openjpa.kernel.jpql.JPQLParser.eval(JPQLParser.java:61)
>     at org.apache.openjpa.kernel.ExpressionStoreQuery$DataStoreExecutor
>  .<init>(ExpressionStoreQuery.java:656)
>     at org.apache.openjpa.kernel.ExpressionStoreQuery.newDataStoreExecutor(
>  ExpressionStoreQuery.java:165)
>     at org.apache.openjpa.kernel.QueryImpl.createExecutor(QueryImpl.java
>  :728)
>     at org.apache.openjpa.kernel.QueryImpl.compileForDataStore(
>  QueryImpl.java:686)
>     at org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java
>  :668)
>     at org.apache.openjpa.kernel.QueryImpl.compile(QueryImpl.java:568)
>     at org.apache.openjpa.persistence.EntityManagerImpl.createNamedQuery(
>  EntityManagerImpl.java:788)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>     at java.lang.reflect.Method.invoke(Unknown Source)
>     at
>  
> org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke
>  (SharedEntityManagerCreator.java:180)
>     at $Proxy32.createNamedQuery(Unknown Source)
>     at
>  
> com.circuitcity.instantcredit.services.persistance.impl.GenericDAOImpl.findByParameters
>  (GenericDAOImpl.java:201)
>     at
>  
> com.circuitcity.instantcredit.services.persistance.impl.GenericDAOImpl$$FastClassByCGLIB$$aea3ab09.invoke
>  (<generated>)
>     at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
>     at
>  
> org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint
>  (Cglib2AopProxy.java:694)
>     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
>  ReflectiveMethodInvocation.java:149)
>     at
>  
> org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke
>  (AfterReturningAdviceInterceptor.java:50)
>     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
>  ReflectiveMethodInvocation.java:171)
>     at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(
>  AspectJAfterThrowingAdvice.java:54)
>     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
>  ReflectiveMethodInvocation.java:171)
>     at
>  
> org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke
>  (MethodBeforeAdviceInterceptor.java:50)
>     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
>  ReflectiveMethodInvocation.java:171)
>     at
>  org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(
>  ExposeInvocationInterceptor.java:89)
>     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
>  ReflectiveMethodInvocation.java:171)
>     at
>  
> org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept
>  (Cglib2AopProxy.java:629)
>     at
>  
> com.circuitcity.instantcredit.services.persistance.impl.GenericDAOImpl$$EnhancerByCGLIB$$d1947d1.findByParameters
>  (<generated>)
>     at
>  
> com.circuitcity.instantcredit.services.impl.CreditApplicationStatusImpl.setCreditInformation
>  (CreditApplicationStatusImpl.java:143)
>     at
>  
> com.circuitcity.instantcredit.services.impl.CreditApplicationStatusImpl.getApplicationsByLocationNumber
>  (CreditApplicationStatusImpl.java:120)
>     at
>  
> com.circuitcity.instantcredit.services.impl.CreditApplicationStatusImpl$$FastClassByCGLIB$$fb599bf0.invoke
>  (<generated>)
>     at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
>     at
>  
> org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint
>  (Cglib2AopProxy.java:694)
>     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
>  ReflectiveMethodInvocation.java:149)
>     at
>  org.springframework.transaction.interceptor.TransactionInterceptor.invoke(
>  TransactionInterceptor.java:106)
>     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
>  ReflectiveMethodInvocation.java:171)
>     at
>  
> org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept
>  (Cglib2AopProxy.java:629)
>     at
>  
> com.circuitcity.instantcredit.services.impl.CreditApplicationStatusImpl$$EnhancerByCGLIB$$3724154a.getApplicationsByLocationNumber
>  (<generated>)
>     at
>  
> com.circuitcity.instantcredit.services.test.CreditStatusTest.testCreditStatusByLocation
>  (CreditStatusTest.java:54)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>     at java.lang.reflect.Method.invoke(Unknown Source)
>     at junit.framework.TestCase.runTest(TestCase.java:154)
>     at junit.framework.TestCase.runBare(TestCase.java:127)
>     at org.springframework.test.ConditionalTestCase.runBare(
>  ConditionalTestCase.java:69)
>     at
>  
> org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests.access$001
>  (AbstractAnnotationAwareTransactionalTests.java:47)
>     at
>  
> org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests$1.run
>  (AbstractAnnotationAwareTransactionalTests.java:113)
>     at
>  
> org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests.runTest
>  (AbstractAnnotationAwareTransactionalTests.java:176)
>     at
>  
> org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests.runTestTimed
>  (AbstractAnnotationAwareTransactionalTests.java:150)
>     at
>  
> org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests.runBare
>  (AbstractAnnotationAwareTransactionalTests.java:109)
>     at org.springframework.test.jpa.AbstractJpaTests.runBare(
>  AbstractJpaTests.java:174)
>     at org.springframework.test.jpa.AbstractJpaTests.runBare(
>  AbstractJpaTests.java:254)
>     at junit.framework.TestResult$1.protect(TestResult.java:106)
>     at junit.framework.TestResult.runProtected(TestResult.java:124)
>     at junit.framework.TestResult.run(TestResult.java:109)
>     at junit.framework.TestCase.run(TestCase.java:118)
>     at junit.framework.TestSuite.runTest(TestSuite.java:208)
>     at junit.framework.TestSuite.run(TestSuite.java:203)
>     at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(
>  JUnit3TestReference.java:130)
>     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(
>  TestExecution.java:38)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
>  RemoteTestRunner.java:460)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
>  RemoteTestRunner.java:673)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
>  RemoteTestRunner.java:386)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(
>  RemoteTestRunner.java:196)
>
>  The complete class is as follows:
>
>  package com.circuitcity.instantcredit.services.persistance.domain;
>
>  import java.sql.Timestamp;
>  import java.util.Date;
>
>  import javax.persistence.AttributeOverride;
>  import javax.persistence.AttributeOverrides;
>  import javax.persistence.Column;
>  import javax.persistence.EmbeddedId;
>  import javax.persistence.Entity;
>  import javax.persistence.EntityListeners;
>  import javax.persistence.FetchType;
>  import javax.persistence.JoinColumn;
>  import javax.persistence.ManyToOne;
>  import javax.persistence.NamedQuery;
>  import javax.persistence.Table;
>  import javax.persistence.Temporal;
>  import javax.persistence.TemporalType;
>  import javax.persistence.Version;
>
>  import
>  com.circuitcity.instantcredit.services.persistance.audit.AuditListenter;
>  import com.circuitcity.instantcredit.services.persistance.audit.Auditable;
>
>  /**
>   * CrAcctDtlTbl entity.
>   *
>   * @author MyEclipse Persistence Tools
>   */
>  @Entity
>  @Table(name = "cr_acct_dtl_tbl", uniqueConstraints = {})
>  @EntityListeners(AuditListenter.class)
>  @NamedQuery(name="findApprovedCreditCards",
>         query="SELECT tbl FROM CreditAccountDetailTbl tbl WHERE
>  prodAcctTypTbl.prodTypCd in ('CPCC', 'CCC') and tbl.id.apcntId = :apcntId")
>  @SuppressWarnings("serial")
>  public class CreditAccountDetailTbl implements java.io.Serializable,
>  Auditable {
>
>     // Fields
>     private CreditAccountDetailTblId id;
>     private ProdAcctTypTbl prodAcctTypTbl;
>     private ApplicantTbl apcntTbl;
>     private CreditAccountTypeTbl crAcctTypTbl;
>     private Timestamp crtDttm;
>     private Timestamp lstUpdDttm;
>     private Date effBegDt;
>     private String lstUpddByTxt;
>     private Double locNbr;
>     private Double crlmtNbr;
>     private Double apr;
>
>     // Constructors
>
>     /** default constructor */
>     public CreditAccountDetailTbl() {
>     }
>
>     /** minimal constructor */
>     public CreditAccountDetailTbl(CreditAccountDetailTblId id, ApplicantTbl
>  apcntTbl,
>             CreditAccountTypeTbl crAcctTypTbl, Double locNbr) {
>         this.id = id;
>         this.apcntTbl = apcntTbl;
>         this.crAcctTypTbl = crAcctTypTbl;
>         this.locNbr = locNbr;
>     }
>
>     /** full constructor */
>     public CreditAccountDetailTbl(CreditAccountDetailTblId id,
>  ProdAcctTypTbl prodAcctTypTbl,
>             ApplicantTbl apcntTbl, CreditAccountTypeTbl crAcctTypTbl,
>  Timestamp crtDttm,
>             Timestamp lstUpdDttm, Date effBegDt, String lstUpddByTxt, Double
>  locNbr,
>             Double crlmtNbr, Double apr) {
>         this.id = id;
>         this.prodAcctTypTbl = prodAcctTypTbl;
>         this.apcntTbl = apcntTbl;
>         this.crAcctTypTbl = crAcctTypTbl;
>         this.crtDttm = crtDttm;
>         this.lstUpdDttm = lstUpdDttm;
>         this.effBegDt = effBegDt;
>         this.lstUpddByTxt = lstUpddByTxt;
>         this.locNbr = locNbr;
>         this.crlmtNbr = crlmtNbr;
>         this.apr = apr;
>     }
>
>     // Property accessors
>     @EmbeddedId
>     @AttributeOverrides( {
>             @AttributeOverride(name = "apcntId", column = @Column(name =
>  "apcnt_id", unique = false, nullable = false, insertable = true, updatable =
>  true)),
>             @AttributeOverride(name = "crAcctTypCd", column = @Column(name =
>  "cr_acct_typ_cd", unique = false, nullable = false, insertable = true,
>  updatable = true, length = 25)) })
>     public CreditAccountDetailTblId getId() {
>         return this.id;
>     }
>
>     public void setId(CreditAccountDetailTblId id) {
>         this.id = id;
>     }
>
>     @ManyToOne(cascade = {}, fetch = FetchType.EAGER)
>     @JoinColumn(name = "prod_typ_cd", unique = false, nullable = true,
>  insertable = true, updatable = true)
>     public ProdAcctTypTbl getProdAcctTypTbl() {
>         return this.prodAcctTypTbl;
>     }
>
>     public void setProdAcctTypTbl(ProdAcctTypTbl prodAcctTypTbl) {
>         this.prodAcctTypTbl = prodAcctTypTbl;
>     }
>
>     @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
>     @JoinColumn(name = "apcnt_id", unique = false, nullable = false,
>  insertable = false, updatable = false)
>     public ApplicantTbl getApcntTbl() {
>         return this.apcntTbl;
>     }
>
>     public void setApcntTbl(ApplicantTbl apcntTbl) {
>         this.apcntTbl = apcntTbl;
>     }
>
>     @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
>     @JoinColumn(name = "cr_acct_typ_cd", unique = false, nullable = false,
>  insertable = false, updatable = false)
>     public CreditAccountTypeTbl getCrAcctTypTbl() {
>         return this.crAcctTypTbl;
>     }
>
>     public void setCrAcctTypTbl(CreditAccountTypeTbl crAcctTypTbl) {
>         this.crAcctTypTbl = crAcctTypTbl;
>     }
>
>     @Temporal(TemporalType.DATE)
>     @Column(name = "crt_dttm", unique = false, nullable = true, insertable =
>  true, updatable = true, length = 4)
>     public Timestamp getCrtDttm() {
>         return this.crtDttm;
>     }
>
>     public void setCrtDttm(Timestamp crtDttm) {
>         this.crtDttm = crtDttm;
>     }
>
>     @Column(name = "lst_upd_dttm", unique = false, nullable = true,
>  insertable = true, updatable = true, length = 4)
>     public Timestamp getLstUpdDttm() {
>         return this.lstUpdDttm;
>     }
>
>     public void setLstUpdDttm(Timestamp lstUpdDttm) {
>         this.lstUpdDttm = lstUpdDttm;
>     }
>
>     @Temporal(TemporalType.DATE)
>     @Column(name = "eff_beg_dt", unique = false, nullable = true, insertable
>  = true, updatable = true, length = 4)
>     public Date getEffBegDt() {
>         return this.effBegDt;
>     }
>
>     public void setEffBegDt(Date effBegDt) {
>         this.effBegDt = effBegDt;
>     }
>
>     @Column(name = "lst_updd_by_txt", unique = false, nullable = true,
>  insertable = true, updatable = true, length = 100)
>     public String getLstUpddByTxt() {
>         return this.lstUpddByTxt;
>     }
>
>     public void setLstUpddByTxt(String lstUpddByTxt) {
>         this.lstUpddByTxt = lstUpddByTxt;
>     }
>
>     @Column(name = "loc_nbr", unique = false, nullable = false, insertable =
>  true, updatable = true, precision = 4, scale = 255)
>     public Double getLocNbr() {
>         return this.locNbr;
>     }
>
>     public void setLocNbr(Double locNbr) {
>         this.locNbr = locNbr;
>     }
>
>     @Column(name = "crlmt_nbr", unique = false, nullable = true, insertable
>  = true, updatable = true, precision = 31, scale = 15)
>     public Double getCrlmtNbr() {
>         return this.crlmtNbr;
>     }
>
>     public void setCrlmtNbr(Double crlmtNbr) {
>         this.crlmtNbr = crlmtNbr;
>     }
>
>     @Column(name = "apr", unique = false, nullable = true, insertable =
>  true, updatable = true, precision = 10, scale = 5)
>     public Double getApr() {
>         return this.apr;
>     }
>
>     public void setApr(Double apr) {
>         this.apr = apr;
>     }
>
>  }
>
>  The trick is that, I am using the join column that is actually part of a
>  related class in the query and my guess is that it is not fetching it or if
>  it is, it is coming back NULL and puking.  Any thoughts on getting around
>  this?  I could go directly against the column as it is defined in this
>  entity, but the attribute for the QL should be coming from the joined class
>  shouldn't it?
>
>  Ron
>



-- 
Patrick Linskey
202 669 5907

Reply via email to