Problème avec une requête hibernate
Bonjour à tous,
J'ai un petit problème, j' ai 2 champs à remplir pour faire une recherche (1 champs identifiant et un champs service) et j'ai plusieurs possibilité remplir un seul champs où les 2 lorsque je rempli un seul champs tout marche et lorsque je rempli les 2 ca reste bloqué sur le page!
voici le code de mon action
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
//--------------------------------------------------
// Cas où les 2 champs sont renseignés
//--------------------------------------------------
if (identifiant != null && service != null)
{
Utilisateur utilisateur = remote.findUser(identifiant, service);
List<Utilisateur> utilisateurs = new ArrayList<Utilisateur>();
if (utilisateur != null && utilisateurs.size() == 1)
{
Logging.info("passe dans le if si les 2 champs sont remplis");
utilisateurs.add(utilisateur);
findUserForm.setUtilisateurs(utilisateurs);
}
else
{
Logging.info("passe dans le else si les 2 champs sont remplis");
findUserForm.setError("Aucune réponse ne correspond à votre recherche.");
}
}
//--------------------------------------------------
// Cas où les l'identifiant est renseigné
//--------------------------------------------------
else if (identifiant != null && service == null)
{
Utilisateur utilisateur = remote.findUser(identifiant);
if (utilisateur != null)
{
Logging.info("passe dans le if si l'identifiant est rempli");
List<Utilisateur> utilisateurs = new ArrayList<Utilisateur>();
utilisateurs.add(utilisateur);
findUserForm.setUtilisateurs(utilisateurs);
}
else
{
Logging.info("passe dans le else si l'identifiant est rempli");
findUserForm.setUtilisateur(null);
findUserForm.setError("Aucune réponse ne correspond à votre recherche.");
}
}
//--------------------------------------------------
// Cas où le champs service est renseigné
//--------------------------------------------------
else if (identifiant == null && service != null)
{
List<Utilisateur> utilisateurs = remote.findUser(service);
if (null != utilisateurs && utilisateurs.size() > 0)
{
Logging.info("passe dans le if si le service est rempli");
findUserForm.setUtilisateurs(utilisateurs);
}
else
{
Logging.info("passe dans le else si l est rempli");
findUserForm.setError("Aucune réponse ne correspond à votre recherche.");
}
}
//--------------------------------------------------
// Cas où aucun des champs sont renseignés
//--------------------------------------------------
else if (identifiant == null && service == null)
{
List<Utilisateur> utilisateurs = remote.findUser(service);
if (null != utilisateurs && utilisateurs.size() > 0)
{
findUserForm.setUtilisateurs(utilisateurs);
}
else
{
findUserForm.setError("Aucune réponse ne correspond à votre recherche.");
}
} |
et le code mes requêtes hql
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
public Utilisateur findByLogin(String login) throws CcipHibernateException {
Logging.info("in UtilisateurDao.findByLogin");
Utilisateur result = null;
try {
Session session = getSession();
if (isLocal() && !session.getTransaction().isActive())
session.beginTransaction();
String hql = "select utilisateur from Utilisateur as utilisateur left join fetch utilisateur.service as service "
+ "left join fetch utilisateur.profil as profil left join fetch profil.restrictions as restriction where utilisateur.identifiant= :login";
Query query = session.createQuery(hql);
query.setString("login", login);
result = (Utilisateur) query.uniqueResult();
}
catch (HibernateException hex) {
hex.printStackTrace();
Logging.error("findByLogin impossible pour le login " + login, hex);
throw new CcipHibernateException("findByLogin impossible pour le login " + login);
}
return result;
}
public List<Utilisateur> findByService(Service service) throws CcipHibernateException {
List<Utilisateur> results = null;
try {
Session session = getSession();
if (isLocal() && !session.getTransaction().isActive())
session.beginTransaction();
results = session.createCriteria(Utilisateur.class).add(Restrictions.eq(Utilisateur.PROP_UTL_SERVICE, service))
.setFetchMode("service", FetchMode.JOIN).setFetchMode("profil", FetchMode.JOIN).setResultTransformer(
Criteria.DISTINCT_ROOT_ENTITY).list();
HashSet set = new HashSet<Utilisateur>(results);
results = new ArrayList<Utilisateur>(set);
}
catch (HibernateException hex) {
Logging.error("findByService impossible pour le service " + service, hex);
throw new CcipHibernateException("findByService impossible pour le service " + service);
}
Logging.info("findByService, taille de la liste des résultats : " + results.size());
return results;
}
public List<Utilisateur> findAllUtilisateurByService(Utilisateur user) throws Exception {
Logging.info("List<Utilisateur> findAllUtilisateurByService() []:");
try {
Session session = getSession();
Utilisateur user1 = (Utilisateur)session.load(Utilisateur.class, user.getId());
Service service = user1.getService();
List<Utilisateur> resultat = findByService(service);
return resultat;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
//c'est celle la qui ne marche pas!
public Utilisateur findByLoginAndService(String login, Service service) throws CcipHibernateException {
List<Utilisateur> results = null;
try {
Session session = getSession();
if (isLocal() && !session.getTransaction().isActive())
session.beginTransaction();
if (login == null || login.length()==0){
List<Utilisateur> tmp = this.findByService(service);
return tmp.get(0);
}
else if (service == null || service.getId()==0){
Query query = session.createQuery("select distinct utilisateur from Utilisateur utilisateur " +
" left join fetch utilisateur.service as service " +
" left join fetch utilisateur.profil as profil " +
" where utilisateur.identifiant=:login " );
query.setString("login", login.toUpperCase());
List<Utilisateur> tmp = query.list();
return tmp.get(0);
}
else{
Query query = session.createQuery("select distinct utilisateur from Utilisateur utilisateur " +
" left join fetch utilisateur.service as service " +
" left join fetch utilisateur.profil as profil " +
" where utilisateur.identifiant=:login and utilisateur.service=:service " +
" order by utilisateur.identifiant");
query.setString("login", login);
query.setEntity("service", service);
return (Utilisateur)query.uniqueResult();
}
}
catch (HibernateException hex) {
Logging.error("findByLoginAndService impossible pour le login " + login + " et le service " + service, hex);
throw new CcipHibernateException("findByLoginAndService impossible pour le login " + login + " et le service "
+ service);
}
} |
Est ce quelqu'un a une idée, svp??