persistance, getResultList avec hibernate/derby
Bonjour!
je deviens fou avec la persistance et hibernate!!
sous netbeans, il y a un exemple qui fonctionne a merveille avec la persistance derby.
Pour mon projet, je me suis basé dessus et j'ai créé ma persistance via hibernate.
pour l'ajout en base, pas de soucis, pour la recherche unique pas de soucis, mais pour faire une liste de ma table, c'est carrement casse tête...
voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public List<Personne> liste(){
javax.persistence.EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory(NOM_PU);
javax.persistence.EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
List<Personne> personnes = null;
try {
personnes = em.createQuery("SELECT OBJECT(i) FROM Personne i").getResultList();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
return personnes;
} |
en faisant un copier coller de l'exemple et remplacant juste le type d'objet et nom de table, j'obtiens l'erreur suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11
| Exception in thread "main" java.lang.NoClassDefFoundError: antlr/ANTLRException
at org.hibernate.hql.ast.ASTQueryTranslatorFactory.createQueryTranslator(ASTQueryTranslatorFactory.java:35)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:74)
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 org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:93)
at gescom.dao.PersonneDao.liste(PersonneDao.java:55)
at gescom.Main.main(Main.java:46) |
bref, apparement hibernate n'arrives pas a faire le mapping entre les resultats et mes objets...
si par contre je met le code suivant (en mettant ma requete a la main donc) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public List<Personne> liste(){
javax.persistence.EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory(NOM_PU);
javax.persistence.EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
List<Personne> personnes = null;
try {
personnes = em.createNativeQuery("select * from \"GESCOM\".Personne").getResultList();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
return personnes;
} |
plus d'erreur!
par contre, dès que j'essaye de faire accès aux getters de mon objet il me donne l'erreur suivante :
code faisant accès aux données :
Code:
1 2 3 4 5 6
| List<Personne> personnelist = personneDao.liste();
System.out.println("3...");
for (int i=0;i<personnelist.size();i++){
System.out.println("4"+i+"...");
System.out.println(personnelist.get(i).getNom());
} |
l'erreur retournée:
Code:
1 2 3
| Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
at gescom.Main.main(Main.java:52)
Java Result: 1 |
si quelqu'un à une idée, j'ai fais le tour de google sans trouver la solution, pire, cela fonctionne parfaitement dans l'exemple qui n'utilises pas hibernate.