Pb Avec requete HQL dans eclipse

Messages postés
22
Date d'inscription
mardi 10 août 2010
Dernière intervention
4 novembre 2016
- 3 nov. 2016 à 14:41 - Dernière réponse :
Messages postés
22
Date d'inscription
mardi 10 août 2010
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
Afficher la suite 

Votre réponse

5 réponses

Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
- 3 nov. 2016 à 15:01
0
Merci
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
Messages postés
22
Date d'inscription
mardi 10 août 2010
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.
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
>
Messages postés
22
Date d'inscription
mardi 10 août 2010
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
Commenter la réponse de cgandco
Messages postés
22
Date d'inscription
mardi 10 août 2010
Dernière intervention
4 novembre 2016
- 4 nov. 2016 à 13:17
0
Merci
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 !
Commenter la réponse de lebelge80
Messages postés
22
Date d'inscription
mardi 10 août 2010
Dernière intervention
4 novembre 2016
- 4 nov. 2016 à 13:36
0
Merci
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
Commenter la réponse de lebelge80

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.