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

Reply via email to