2009-12-12 2 views
4

J'ai une table avec clef composée ..Obtenir Hibernate Exception: org.hibernate.QueryException: ne pouvait pas résoudre la propriété

Pour que je l'ai fait 2 haricots pour mappings annotations de mise en veille prolongée ..

Maintenant, il fonctionne très bien pour enregistrer, mettre à jour et supprimer ..

Mais quand je suis aller chercher l'aide des critères, il me donne exception « ne pouvait pas résoudre la propriété ».

Mes haricots sont les suivants:

WBList.java

@Entity 
public class WBList { 

    private WBListPK id; 
    private String wb; 

    @Id 
    public WBListPK getId() { 
     return id; 
    } 
    public void setId(WBListPK id) { 
     this.id = id; 
    } 
    @Column(name = "wb") 
    public String getWb() { 
     return wb; 
    } 
    public void setWb(String wb) { 
     this.wb = wb; 
    } 
} 

WBListPK.java

@Embeddable 
public class WBListPK implements Serializable { 

    private int rid; 
    private int sid; 

    public WBListPK() { 
    } 
    public WBListPK(Integer rid, Integer sid) { 
     this.rid = rid; 
     this.sid = sid; 
    } 
    public int getRid() { 
     return rid; 
    } 
    public void setRid(int rid) { 
     this.rid = rid; 
    } 
    public int getSid() { 
     return sid; 
    } 
    public void setSid(int sid) { 
     this.sid = sid; 
    } 
} 

FindByAll Méthode de Mon DAO est la suivante:

public List<WBList> findByAll(final WBListPK wbListPK, final String wb) { 
     List results = null; 
     results = this.hibernateTemplate.executeFind(new HibernateCallback() { 

      public Object doInHibernate(Session session) 
        throws HibernateException, SQLException { 

       Criteria criteria = session.createCriteria(WBList.class); 

       if (wb != null) { 
        criteria.add(Expression.like("wb", wb)); 
       } 

       if(wbListPK.getRid()!=0){ 
        criteria.add(Expression.eq("rid", wbListPK.getRid())); 
       } 
       if(wbListPK.getSid()!=0){ 
        criteria.add(Expression.eq("sid", wbListPK.getSid())); 
       } 
       return criteria.list(); 
      } 
     }); 

     return results; 
    } 

J'appelle cette findBy Tous méthode de mon contrôleur, le code est:

WBListPK wbListPK = new WBListPK(); 
WBList wbList = new WBList(); 
wbListPK.setRid(10); 
wbListPK.setSid(20); 
List<WBList> wbListList = this.wbListSecurityProcessor.findByAll(wbListPK, "b"); 
System.out.println("wbListList = "+wbListList); 

Lorsque j'exécute code ci-dessus, il me donne exception suivante (avec stacktrace):

org.springframework.orm.hibernate3.HibernateQueryException: could not resolve property: rid of: com.sufalam.mailserver.bean.WBList; nested exception is org.hibernate.QueryException: could not resolve property: rid of: com.sufalam.mailserver.bean.WBList 
    org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:655) 
    org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412) 
    org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411) 
    org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:343) 
    com.sufalam.mailserver.dao.WBListDao.findByAll(WBListDao.java:42) 
    com.sufalam.mailserver.business.WBListProcessor.findByAll(WBListProcessor.java:33) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196) 
    $Proxy113.findByAll(Unknown Source) 
    com.sufalam.mailserver.business.security.WBListSecurityProcessor.findByAll(WBListSecurityProcessor.java:28) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196) 
    $Proxy120.findByAll(Unknown Source) 
    com.sufalam.mailserver.presentation.web.WBListManageController.handleRequest(WBListManageController.java:65) 
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:781) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:726) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:636) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:545) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) 

root cause 

org.hibernate.QueryException: could not resolve property: rid of: com.sufalam.mailserver.bean.WBList 
    org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44) 
    org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:38) 
    org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1379) 
    org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31) 
    org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1354) 
    org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:434) 
    org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:394) 
    org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:45) 
    org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:334) 
    org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:90) 
    org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:59) 
    org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:69) 
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1554) 
    org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283) 
    com.sufalam.mailserver.dao.WBListDao$1.doInHibernate(WBListDao.java:59) 
    org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) 
    org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:343) 
    com.sufalam.mailserver.dao.WBListDao.findByAll(WBListDao.java:42) 
    com.sufalam.mailserver.business.WBListProcessor.findByAll(WBListProcessor.java:33) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196) 
    $Proxy113.findByAll(Unknown Source) 
    com.sufalam.mailserver.business.security.WBListSecurityProcessor.findByAll(WBListSecurityProcessor.java:28) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196) 
    $Proxy120.findByAll(Unknown Source) 
    com.sufalam.mailserver.presentation.web.WBListManageController.handleRequest(WBListManageController.java:65) 
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:781) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:726) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:636) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:545) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) 

S'il vous plaît aidez-moi si quelqu'un a des solutions. .

Merci d'avance ..

+0

donne le code DAO – Bozho

Répondre

5

rid et sid sont des propriétés d'identifiant composite (WbListPK), pas l'entité elle-même. Vous donc besoin de se référer à eux en conséquence:

if(wbListPK.getRid()!=0){ 
    criteria.add(Expression.eq("id.rid", wbListPK.getRid())); 
} 
if(wbListPK.getSid()!=0){ 
    criteria.add(Expression.eq("id.sid", wbListPK.getSid())); 
} 

Notez le préfixe id.. Voir where clause et referring to id property chapitres dans la documentation Hibernate pour plus de détails/exemples (ils traitent HQL mais la majorité des choses s'applique également à l'API Criteria)

+0

@ ChssPly76 Merci beaucoup pour votre réponse ... Il fonctionne avec vos suggestions ... – Nirmal

+0

Pour les autres qui trébucher sur ce post parce qu'ils ont des problèmes avec un alias dans une requête de critères pour une classe qui a un @EmbeddedId, voir: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4587 – benvolioT

4

Eh bien pas vraiment une réponse spécifique à cette question, mais pourrait aider d'autres personnes qui obtiennent une erreur comme celle-ci, pour moi c'était une question de sensibilité à la casse. En d'autres termes, le nom de la propriété de chaîne dans les critères que vous donnez doit correspondre à celui de votre fichier mappeur, par exemple:

criteria.add(Restrictions.eq("patient", patient)); 

J'ai eu l'erreur depuis que je l'avais utilisé « patient » ici, alors que mon entité a la propriété "Patient" et la table de base de données ont le champ "idPatient", alors que j'avais nommé la relation dans le fichier mapper "patient". affichage juste, cela va peut-être aider certaines personnes à l'avenir, parce que je suis entré dans ce fil en entrant l'erreur dans google.

Questions connexes