Pb Avec requete HQL dans eclipse

lebelge80 Messages postés 22 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 4 novembre 2016 - Modifié par lebelge80 le 3/11/2016 à 14:42
lebelge80 Messages postés 22 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 4 novembre 2016 - 4 nov. 2016 à 13:36
Bonjour,
J'ai un soucis avec mon code en Java sous eclipse et Hibernate tool.
J'execute des requetes sous hibernate tool et la réponse est correcte. Par contre ma requete ne fonctionne pas dans Java. Ca fait 3 jours que je galère pour une requete qui je pense doit etre simple. Du coup je sais plus si mon problème vient de ma requete ou de mon code Java.
Je vous expose mon probleme:
J'ai 3 classes : Item, Analyse, Contact
L'item correspond au sujet majeur. L'Analyse est le constat du problème pour lequel on a ouvert l'item. Le contact est celui qui managera l'analyse. Il peut y avoir plusieurs analyse et plusieurs contact.
Ma config hibernate est la suivante :
<!-- La configuration de classe Item  -->

<class name="methode.report.Item" table="ITEM" lazy="false" >
<meta attribute="class-description">la classe item </meta>
<id name="idItem" type="integer">
<generator class="native"/>
</id>

<!-- xxxxx -->
<property name="nameItem" type="string" not-null="true"/>
<set name="usine" lazy="false" cascade="save-update" table="usineItem" >
<key column="idItem" />
<many-to-many class="metier.usine.Usine" />
</set>
<set name="nameAnalyse" lazy="false" cascade="save-update" table="analyseItem" >
<key column="idItem" />
<many-to-many class="methode.report.Analyse" />
</set>
<property name="dateCreation" type="date" not-null="true"/>
<property name="dateUpdate" type="date" />
<property name="heureUpdate" type="date" />
<property name="statusItem" type="integer" />
<property name="dateClosed" type="date" />
<property name="dateCanceled" type="date" />
<property name="dateLastRelease" type="date" />
<set name="produits" table="produitsItem" cascade="all" lazy="false">
<key column="idItem"/>
<element column="produits" type="string"/>
</set>



</class>

<!-- La configuration de classe Analyse -->

<class name="methode.report.Analyse" table="ANALYSE" lazy="false" >
<meta attribute="class-description">la classe analyse </meta>
<id name="idAnalyse" type="integer">
<generator class="native"/>
</id>

<!-- xxxxx -->
<property name="nameAnalyse" type="string" not-null="true"/>

<set name="action" lazy="false" cascade="save-update" table="analyseAction" >
<key column="idAnalyse" />
<many-to-many class="methode.report.Action" />
</set>
<set name="manager" lazy="false" cascade="save-update" table="manageAnalyse" >
<key column="idAnalyse" />
<many-to-many class="metier.utilisateurs.Contact" />
</set>


</class>

<!-- La configuration de classe Contact -->

<class name="metier.utilisateurs.Contact" table="CONTACT" lazy="false">
<meta attribute="class-description">la classe contact </meta>
<id name="idContact" type="integer">
<generator class="native"/>
</id>

<property name="nom" type="string" not-null="true" />
<property name="prenom" type="string" not-null="true" />
<property name="email" type="string" />
<property name="telephone" type="string"/>
<property name="adresse" type="string" />
<property name="fonction" type="string" />
<many-to-one name="usine" lazy="false" class="metier.usine.Usine" />
</class>

Et voici mes classes:

public class Item {
// les attribut de la classe Item
private Integer idItem;
private String nameItem= "";
private Set<Usine> usine = new HashSet<Usine>();
private Set<Analyse> nameAnalyse = new HashSet<Analyse>();
private Set<Contact> manager = new HashSet<Contact>();
private Set<Action> action= new HashSet<Action>();
private Date dateCreation = new Date();
private Date dateUpdate = new Date();
private Date heureUpdate = new Date();
private Integer statusItem;
private Date dateClosed= new Date();
private Date dateCanceled= new Date();
private Date dateLastRelease= new Date();
private Set<String> produits= new HashSet<String>();

public class Analyse {

private Integer idAnalyse;
private String nameAnalyse="";
private Set<Action> action = new HashSet<Action>();
private Set<Contact> manager=new HashSet<Contact>();

public class Contact {
/* Les attribut du contact */
private Integer idContact ;
private String nom = "";
private String prenom = "";
private String email= "";
private String telephone = "";
private String adresse = "";
private String fonction ="";
private Usine usine;

voici le code qui execute la requete HQL :

public class AnalyseDao {
public static String getManager(Item item){ // je cherche l'usine d'une machine
Session session = factory.openSession();
String manager = null ;
Transaction tx = null;
try{
tx = session.beginTransaction();
Query query = session.createQuery("select distinct manager FROM Analyse as analyse"
+ "where item.idItem = :m");
query.setInteger("m", item.getIdItem());// je remplace le "nom" par la variable nom
manager = (String) query.list().get(0);
System.out.println("Requete Manager : "+manager);
tx.commit();
}catch (HibernateException e) {
if (tx!=null) tx.rollback();
logger.error(e.getMessage());
}finally {
session.close();
}
return manager;
}
}

Le retour de ma requete est NULL.
Pouvais vous m'aider svp ?
D'avance merci

3 réponses

cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 9
3 nov. 2016 à 15:01
bonjour,

Si tu as fait un copier coller, il manque un espace entre "analyse" et le "where" de ta requete.


Query query = session.createQuery("select distinct manager FROM Analyse as analyse "
             + "where item.idItem = :m");


bonne journée
0
lebelge80 Messages postés 22 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 4 novembre 2016
3 nov. 2016 à 15:12
Merci de ta réponse
En effet j'avais oublié ça, mais même problème.
je pense qu'il me manque des Left Join, mais j'ai du mal avec hibernate.
0
cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 9 > lebelge80 Messages postés 22 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 4 novembre 2016
3 nov. 2016 à 16:05
Je ne connais pas Hibernate, mais je pense que tu as raison car apparemment il n'y a pas de propriété idItem dans Analyse.

Bonne journée
0
lebelge80 Messages postés 22 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 4 novembre 2016
4 nov. 2016 à 13:17
Alors je progresse :
voici une requete qui marche :

Query query = session.createQuery("select distinct a.nameAnalyse FROM Item as item "
+ " left join item.nameAnalyse as a "
+ " where item.idItem = :m ");
query.setInteger("m", item.getIdItem());

le probléme est que cette requete m'affiche l'intitulé de l'analyse qui se trouve dans "nameAnalyse". Moi je veux afficher celui qui manage cette analyse. le champ "manager"

Voici la méthode que j'utilise et qui s'affiche sur la console eclipse :

Item [idItem=1, nameItem=W3-W4 welding Machine, usine=[STL], nameAnalyse=[Analyse [idAnalyse=1, nameAnalyse=Difficult to weld without bend the bimetal, action=[], manager=[moi ]]], manager=[], action=[], dateCreation=2014-06-01, dateUpdate=null, heureUpdate=null, statusItem=null, dateClosed=null, dateCanceled=null, dateLastRelease=null, produits=[Domae, C60]]

Je suis pas loin mais j'arrive pas à écrire ma requête hibernate pour mon code java.
Help please !
0
lebelge80 Messages postés 22 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 4 novembre 2016
4 nov. 2016 à 13:36
Ca marche !!! Pb résolu !
Voici ma requete pour quelqu'un (au cas où )

Query query = session.createQuery("select distinct b.prenom FROM Item as item "
+ " left join item.nameAnalyse as a "
+ " left join a.manager as b "
+ " where item.idItem = :m ");
query.setInteger("m", item.getIdItem());

A une prochaine
0
Rejoignez-nous