IllegalArgumentException: org.hibernate.QueryException: could not resolve property:

Herr_M

Erfahrenes Mitglied
Hi ich habe versucht ein Query mit JPAQL zu schreiben, dass wie folgt aussieht:

Code:
  public List<KriterienCombinationValueObject> selectFormkriterien(int foidx)
      throws Exception {

    try {
      System.out.println("AccessSessionBean - selectFormkriterien(int foidx)");

      String queryString =
          " SELECT  " 
              + " k.kritgruppennr, "
              + " kg.kritgruppenbez, "
              + " k.krname, " 
              + " fk.text, "
              + " fk.foidx, " 
              + " fk.krnr, "
              + " fk.fknr "              
              + " FROM " 
              + "   FormKriterienBean fk, " 
              + "   KriterienBean k,"
              + "   KritGruppenBean kg " 
              + " WHERE fk.foidx = ?1 "
              + "   AND k.krnr = fk.krnr "
              + "   AND k.kritgruppennr = kg.kritgruppennr ";

      List<KriterienCombinationValueObject> listeFormKriterien =
          new ArrayList<KriterienCombinationValueObject>();

      Query query =  manager.createQuery(queryString);//Hier fliegt die Exception
      query.setParameter(1, foidx);//Das hier wird garnicht mehr ausgeführt.

      ... // Hier dann Code der ausgeführt werden soll (würde die Exception nicht geworfen)
  }

Führe ich das ganze aus, wird folgende Exception geworfen: java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: kritgruppennr
Ich verstehe, dass an dieser Stelle nicht was mir das sagen will?
Die kritgruppennr ist ja da?
StackTrace:
Code:
10:58:08,168 ERROR [STDERR] java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: kritgruppennr of: com.de.anycompany.fmdb.ejb.KriterienBean [ SELECT   k.kritgruppennr,  kg.kritgruppenbez,  k.krname,  fk.text,  fk.foidx,  fk.krnr,  fk.fknr  FROM    com.de.anycompany.fmdb.ejb.FormKriterienBean fk,    com.de.anycompany.fmdb.ejb.KriterienBean k,   com.de.anycompany.fmdb.ejb.KritGruppenBean kg  WHERE fk.foidx = ?1    AND k.krnr = fk.krnr    AND k.kritgruppennr = kg.kritgruppennr ]
10:58:08,183 ERROR [STDERR] 	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:616)
10:58:08,183 ERROR [STDERR] 	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:95)
10:58:08,183 ERROR [STDERR] 	at org.jboss.ejb3.entity.TransactionScopedEntityManager.createQuery(TransactionScopedEntityManager.java:134)
10:58:08,183 ERROR [STDERR] 	at com.de.anycompany.fmdb.ejb.AccessSessionBean.selectFormkriterien(AccessSessionBean.java:1487)
10:58:08,183 ERROR [STDERR] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
10:58:08,183 ERROR [STDERR] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
10:58:08,183 ERROR [STDERR] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
10:58:08,199 ERROR [STDERR] 	at java.lang.reflect.Method.invoke(Method.java:597)
10:58:08,199 ERROR [STDERR] 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
10:58:08,199 ERROR [STDERR] 	at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
10:58:08,199 ERROR [STDERR] 	at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
10:58:08,199 ERROR [STDERR] 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
10:58:08,199 ERROR [STDERR] 	at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
10:58:08,199 ERROR [STDERR] 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
10:58:08,214 ERROR [STDERR] 	at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
10:58:08,214 ERROR [STDERR] 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
10:58:08,214 ERROR [STDERR] 	at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
10:58:08,214 ERROR [STDERR] 	at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)
10:58:08,214 ERROR [STDERR] 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
10:58:08,214 ERROR [STDERR] 	at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
10:58:08,214 ERROR [STDERR] 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
10:58:08,214 ERROR [STDERR] 	at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
10:58:08,214 ERROR [STDERR] 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
10:58:08,214 ERROR [STDERR] 	at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
10:58:08,230 ERROR [STDERR] 	at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
10:58:08,230 ERROR [STDERR] 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
10:58:08,230 ERROR [STDERR] 	at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
10:58:08,230 ERROR [STDERR] 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
10:58:08,230 ERROR [STDERR] 	at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
10:58:08,230 ERROR [STDERR] 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
10:58:08,230 ERROR [STDERR] 	at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:304)
10:58:08,230 ERROR [STDERR] 	at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
10:58:08,246 ERROR [STDERR] 	at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
10:58:08,246 ERROR [STDERR] 	at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:769)
10:58:08,246 ERROR [STDERR] 	at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:573)
10:58:08,246 ERROR [STDERR] 	at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373)
10:58:08,246 ERROR [STDERR] 	at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166)
10:58:08,261 ERROR [STDERR] Caused by: org.hibernate.QueryException: could not resolve property: kritgruppennr of: com.de.anycompany.fmdb.ejb.KriterienBean [ SELECT   k.kritgruppennr,  kg.kritgruppenbez,  k.krname,  fk.text,  fk.foidx,  fk.krnr,  fk.fknr  FROM    com.de.anycompany.fmdb.ejb.FormKriterienBean fk,    com.de.anycompany.fmdb.ejb.KriterienBean k,   com.de.anycompany.fmdb.ejb.KritGruppenBean kg  WHERE fk.foidx = ?1    AND k.krnr = fk.krnr    AND k.kritgruppennr = kg.kritgruppennr ]
10:58:08,261 ERROR [STDERR] 	at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)
10:58:08,261 ERROR [STDERR] 	at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:38)
10:58:08,277 ERROR [STDERR] 	at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1358)
10:58:08,277 ERROR [STDERR] 	at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:279)
10:58:08,277 ERROR [STDERR] 	at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:386)
10:58:08,277 ERROR [STDERR] 	at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:566)
10:58:08,277 ERROR [STDERR] 	at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:241)
10:58:08,277 ERROR [STDERR] 	at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:188)
10:58:08,277 ERROR [STDERR] 	at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:94)
10:58:08,277 ERROR [STDERR] 	at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:90)
10:58:08,277 ERROR [STDERR] 	at org.hibernate.hql.ast.tree.DotNode.resolveSelectExpression(DotNode.java:629)
10:58:08,293 ERROR [STDERR] 	at org.hibernate.hql.ast.HqlSqlWalker.resolveSelectExpression(HqlSqlWalker.java:739)
10:58:08,293 ERROR [STDERR] 	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:1885)
10:58:08,293 ERROR [STDERR] 	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:1825)
10:58:08,293 ERROR [STDERR] 	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1394)
10:58:08,293 ERROR [STDERR] 	at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:553)
10:58:08,293 ERROR [STDERR] 	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
10:58:08,293 ERROR [STDERR] 	at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
10:58:08,293 ERROR [STDERR] 	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
10:58:08,308 ERROR [STDERR] 	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
10:58:08,308 ERROR [STDERR] 	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
10:58:08,324 ERROR [STDERR] 	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
10:58:08,324 ERROR [STDERR] 	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
10:58:08,324 ERROR [STDERR] 	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
10:58:08,324 ERROR [STDERR] 	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
10:58:08,324 ERROR [STDERR] 	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
10:58:08,324 ERROR [STDERR] 	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
10:58:08,324 ERROR [STDERR] 	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:92)
10:58:08,324 ERROR [STDERR] 	... 35 more

Hier noch der Code zu den beteiligten Bean Klassen:
KriterienBean
Code:
package com.de.anycompany.fmdb.ejb;

import javax.persistence.*;

@Entity
@Table(name = "KRITERIEN")

@SequenceGenerator(name="KRNR_SEQUENCE", sequenceName="SEQ_KRITERIEN_KRNR")
public class KriterienBean implements java.io.Serializable {

  private int krNr;
  private int kritGruppenNr;
  private String krName;
  private Integer krTyp;

  @Id
  @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="KRNR_SEQUENCE")
  @Column(name="KRNR")
  public int getKrNr() {
    return krNr;
  }
  public void setKrNr(int krNr) {
    this.krNr = krNr;
  }

  @Column(name="KRITGRUPPENNR")
  public int getKritGruppenNr() {
    return kritGruppenNr;
  }
  public void setKritGruppenNr(int kritGruppenNr) {
    this.kritGruppenNr = kritGruppenNr;
  }

  @Column(name="KRNAME")
  public String getKrName() {
    return krName;
  }
  public void setKrName(String krName) {
    this.krName = krName;
  }

  @Column(name="KRTYP")
  public Integer getKrTyp() {
      return krTyp;
  }
  public void setKrTyp(Integer krTyp) {
    this.krTyp = krTyp;
  }
}

KritGruppenBean
Code:
package com.de.anycompany.fmdb.ejb;

import javax.persistence.*;

@Entity
@Table(name = "KRITGRUPPEN")
@SequenceGenerator(name="KRITGRUPPENNR_SEQUENCE", sequenceName="SEQ_KRITGRUPPEN_NR")
public class KritGruppenBean implements java.io.Serializable {
  
  private int kritGruppenNr = 0;
  private String kritGruppenBez = "";

  @Column(name="KRITGRUPPENNR")
  public String getKritGruppenBez() {
    return kritGruppenBez;
  }
  public void setKritGruppenBez(String kritGruppenBez) {
    this.kritGruppenBez = kritGruppenBez;
  }

  @Id
  @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="KRITGRUPPENNR_SEQUENCE")
  @Column(name="KRITGRUPPENBEZ")
  public int getKritGruppenNr() {
    return kritGruppenNr;
  }
  public void setKritGruppenNr(int kritGruppenNr) {
    this.kritGruppenNr = kritGruppenNr;
  }
}

FormKriterienBean
Code:
package com.de.anycompany.fmdb.ejb;

import javax.persistence.*;

@Entity
@IdClass(FormKriterienPK.class)
@Table(name="FORMKRITERIEN")

@SqlResultSetMapping(name="formkriterienUndKriterienUndKriterienGruppen",
    entities={@EntityResult(entityClass=FormKriterienBean.class),   
              @EntityResult(entityClass=KriterienBean.class,
                  fields={@FieldResult(name="krNr", column="kkrnr"),
                          @FieldResult(name="kritGruppenNr", column="kritgruppennr"),
                          @FieldResult(name="krName", column="krname"),
                          @FieldResult(name="krTyp", column="kkrtyp")})
              })
@SequenceGenerator(name="KRITGRUPPENNR_SEQUENCE", sequenceName="SEQ_FORMKRITERIEN_FOIDX")              
public class FormKriterienBean implements java.io.Serializable {

  private int foIdx;
  private int fkNr;
  private String text = "";
  private Integer krNr = Integer.valueOf(0);

  @Id
  @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="KRITGRUPPENNR_SEQUENCE")
  @Column(name="FKNR")
  public int getFkNr() {
    return fkNr;
  }
  public void setFkNr(int fkNr) {
    this.fkNr = fkNr;
  }

  @Id
  @Column(name="FOIDX")
  public int getFoIdx() {
    return foIdx;
  }
  public void setFoIdx(int foIdx) {
    this.foIdx = foIdx;
  }
  @Column(name="TEXT")
  public String getText() {
    return text;
  }
  public void setText(String text) {
    this.text = text;
  }
  @Column(name="KRNR")
  public Integer getKrNr() {
      return krNr;
  }
  public void setKrNr(Integer krNr) {
    this.krNr = krNr;
  }
}
 
Zuletzt bearbeitet:
Deine Property heißt kritGruppenNr und nicht kritgruppennr. StringBuffer ist dein Freund (zwecks performance). Und ehrlich gesagt ist mir schleierhaft, wie ihr bei diesem Denglish Kauderwelsch den Code noch lesen könnt *grusel* ;).

REINHAUN!
 
Hi Oliver,

zum wiederholten male bist du mein Retter!

... und Schande über mein Haupt, auch wenn das mein erster "komplexer" Query mie EJB QL ist, hätte ich eigentlich selber drauf kommen müssen :( hab ich doch 5 Minuten vorher noch in einem Tutorial gelesen, dass die Sache CaseSensitive ist :)
Tja das kommt davon wenn man einfach nur am alen SQL Query rumbastelt anstatt das ding einfach mal komplett neu zu schreiben.

Danke für den Tipp mit dem StringBuffer, den vergess ich fast jedes mal.
 

Neue Beiträge

Zurück