Hibernate jette étrange erreur: la Classe n'est pas mappé
c'est l'erreur
org.hibernate.hql.ast.QuerySyntaxException: Payment is not mapped [select p from Payment p]
Je ne comprends pas comment se fait cette erreur est levée, la classe doit être mappé comme je vais vous montrer brièvement. J'ai une config de base, comme celui-ci: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/ch01.html
J'ai essayé d'ajouter la définition de la cartographie en hibernate.cfg.xml et j'ai également essayé de l'ajouter par programmation. Aucun d'entre eux travaillaient. Quelqu'un pourrait-il me dire ce qui me manque ici? (ce n'est pas la première fois que j'ai mis en place un projet Hibernate)
c'est le hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/paymentsdatabase</property>
<property name="hibernate.connection.username">xxx</property>
<property name="hibernate.connection.password">xxx</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<!-- <mapping class="com.lsyh.swati.zk.model.Payment"/> -->
</session-factory>
</hibernate-configuration>
la connexion de base de données fonctionne bien, je l'ai testé que
c'est l'initialiseur statique dans mon HibernateUtil
static {
try {
//Create the SessionFactory from standard (hibernate.cfg.xml)
//config file.
sessionFactory = new AnnotationConfiguration()
.addPackage("com.lsyh.swati.zk.model")
.addAnnotatedClass(Payment.class)
.configure().buildSessionFactory();
} catch (Throwable ex) {
//Log the exception.
System.err.println("Initial SessionFactory creation failed. " + ex);
throw new ExceptionInInitializerError(ex);
}
}
et c'est là que j'ai utiliser de la sessionFactory dans le PaymentIODb classe:
public static List<Payment> readDataFromDb(){
StatelessSession session = StoreHibernateUtil.getSessionFactory().openStatelessSession();
Query query = session.createQuery("select p from Payment p");
List<Payment> payments = query.list();
session.close();
return payments;
}
c'est la trace de la pile
org.hibernate.hql.ast.QuerySyntaxException: Payment is not mapped [select p from Payment p]
at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:255)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at com.lsyh.swati.zk.controller.PaymentIODb.readDataFromDb(PaymentIODb.java:35)
at com.lsyh.swati.zk.controller.PaymentIODb.resolveVariable(PaymentIODb.java:20
- Pouvez-vous montrer le
Payment
classe? Comment il est annoté? - Liés à: stackoverflow.com/questions/14446048/...
Vous devez vous connecter pour publier un commentaire.
Je m'attends à une des deux choses à la raison:
soit vous n'avez pas de Paiement mentionnés dans votre hibernat.cfg.xml ou là où jamais vous vos config mappé classes.
une autre raison pourrait être la confusion entre javax...Entité et org.mise en veille prolongée....De l'entité. Assurez-vous d'utiliser la première.
Au lieu de
essayer cette
2011-12-15 19:39:39,246 [http-8080-2] WARN org.hibernate.hql.QuerySplitter - no persistent classes found for query class: select p from com.lsyh.swati.zk.model.Payment p
dé-commenter le commentaire du code de mappage dans hibernate.cfg.xml fichier de configuration
pour plus d'informations, consulter ce lien
http://www.javabeat.net/tips/112-configure-mysql-database-with-hibernate-mappi.html
Votre entity bean n'est pas enregistré, je suppose.
Régler correctement la racine du package nom de votre entité haricots dans packagesToScan de la propriété.
Vérifiez aussi votre @Table(name="name_of_your_table").
Bien accepté réponse est correcte, voudrais ajouter du contexte à la première partie de la réponse.
À l'intérieur de votre config.java (ou ce que vous avez nommé votre fichier de configuration d'application dans des emballages), assurez-vous d'avoir correctement configuré votre entityScan:
Toutefois, si vous aimez notre équipe ont déplacé les objets dans leurs propres forfaits, vous pouvez laisser une numérisation de tous les dossiers d'assemblage:
Maintenant que toutes les entités sont dans les entités de dossier en particulier.
Pour moi, ma Classe n'était pas inscrit dans mon Persistence.xml fichier dans la section de classe.
Faire pour résoudre l'ish. ou partout où vos classes sont répertoriés.