hibernate.QueryException: could not resolve property
Bonjour à tous,
J'ai une application struts qui utilise Hibernate.
Dans ma DB (PostgreSQL) j'ai notament une table "Categorie" qui possède 3 champs :
CATEGORIE (Primary key)
NOM
CATEGORIE_FK (Foreign key vers categorie.categorie)
"CATEGORIE_FK sert a définir une catégorie mère dont elle serait issue.
Niveau Hibernate, voici ma classe Categorie :
Citation:
package tfe.hibernate ;
/**
*
*
* @hibernate.class
* table="CATEGORIE"
*
*/
public class Categorie {
// <editor-fold defaultstate="collapsed" desc=" Property: String nom ">
private String nom;
/**
* @hibernate.property
* column="nom"
* type="java.lang.String"
* @hibernate.column
* name="nom"
* sql-type="VARCHAR(255) UNIQUE"
* not-null="true"
*/
public String getNom () {
return nom;
}
public void setNom (String nom) {
this.nom = nom;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" PrimaryKey: int categorieid ">
private int categorieid;
/**
*
*
* @hibernate.column name="Categorie"
* not-null="true"
* @hibernate.id generator-class="native"
* column="Categorie"
* type="int"
*/
public int getCategorieid () {
return categorieid;
}
public void setCategorieid (int categorieid) {
this.categorieid = categorieid;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" 1-N Relation to Collection /*tfe.hibernate.Categorie*/ souscategories ">
private java.util.Collection souscategories;
/**
*
*
* @hibernate.collection-key column="CATEGORIE_FK"
* @hibernate.collection-one-to-many class="tfe.hibernate.Categorie"
* @hibernate.set role="souscategories"
*/
public java.util.Collection getCategories() {
return this.souscategories;
}
public void setCategories(java.util.Collection souscategories) {
this.souscategories = souscategories;
}
// </editor-fold>
}
Lorsque j'exécute une sélection avec Criteria sans condition, ca fonctionne.
Mais quand je veut avoir les catégories mères (donc celle qui ont un null dans le champs "Categorie_fk" j'obtiens un message d'erreur.
Voici mon code pour la requête :
Citation:
try {
/*création d'un object critéria avec paramètres de requête pour avoir uniquement les principales*/
Criteria crit = session.createCriteria(Categorie.class);
crit.add(Expression.eq("categorie_fk","null"));
List list = crit.list();
Iterator it = list.iterator();
ArrayList categories = new ArrayList();
while (it.hasNext()) {
Categorie cat = (Categorie) it.next();
String label = cat.getNom();
String value = String.valueOf(cat.getCategorieid());
categories.add(new LabelValueBean(label, value));
}
return categories;
} catch ...
J'ai essayé comme champs de recherche soit "souscategories" comme spécifié dans ma classe et "categorie_fk" comme spécifié dans ma DB, mais j'ai toujours la même erreur.
Voici mon message d'erreur :
Citation:
exception
javax.servlet.ServletException: could not resolve property: categorie_fk of: tfe.hibernate.Categorie
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
cause mère
org.hibernate.QueryException: could not resolve property: categorie_fk of: tfe.hibernate.Categorie
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:1375)
org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31)
org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1350)
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:82)
org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:67)
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1550)
org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
tfe.Modele.getCategoriesPrincipales(Modele.java:140)
tfe.PublicationAction.execute(PublicationAction.java:45)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
Quelqu'un a t il déjà eu ce problème ?
Comment puis je le corriger ?
Merci de votre aide.
Eric
hibernate.QueryException: could not resolve property
Merci DenisJava,
Mon problème provenait du fait que je réfléchissais toujours en modèle relationnel.
J'ai lu la documentation d'hibernate et avec ta réponse, j'ai pu corriger mon erreur.
Un grand merci
Eric.