IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Recherche multicritères sur tables associées (API Criteria)


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Java Developer
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Java Developer
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut Recherche multicritères sur tables associées (API Criteria)
    Ce que j'essaie de faire ci-dessous est une recherche multicritères sur une table associée à d'autres tables (OneToMany).

    Voici un résumé de la situation:
    Customer 1 - * Address.

    Un customer possède donc plusieurs addresses.

    La classe Customer simplifiée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    @Entity
    @Table(name = "CUSTOMER")
    public class Customer implements java.io.Serializable {
     
    	private List<Address> address;
     
    	@OneToMany
    	@JoinColumn(name = "customer_ref")
    	public List<Address> getAddress() {
    		return address;
    	}
     
    	public void setAddress(List<Address> address) {
    		this.address = address;
    	}
     
    }
    et la classe Address (aussi simplifiée)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    @Entity
    @Table(name = "ADDRESS")
    public class Address implements java.io.Serializable {
     
    private AddressId id;
    	private String zipcode;
    	private String address1;
     
    	@Column(name = "ZIPCODE", length = 16)
    	public String getZipcode() {
    		return this.zipcode;
    	}
     
    	public void setZipcode(String zipcode) {
    		this.zipcode = zipcode;
    	}
     
    	@Column(name = "ADDRESS_1", nullable = false, length = 80)
    	public String getAddress1() {
    		return this.address1;
    	}
     
    	public void setAddress1(String address1) {
    		this.address1 = address1;
    	}
    }

    Et finalemeent la fonction permettant la recherche (qui ne fonctionne pas):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public List<Customer> searchCustomers(Map<String, String> criterias) {
    		String companyName = criterias.get("name");
    		String address = criterias.get("address");
    		String zipCode = criterias.get("zipCode");
    		Session session = HibernateUtil.getSessionFactory().openSession();
     
    		Criteria criteria = session.createCriteria(Customer.class);
     
    		if (companyName != null) {
    			criteria.add(Restrictions.ilike("companyName", companyName + "%"));
    		}
    		if (address != null) {
    			criteria.add(Restrictions.ilike("address1", address + "%"));
    		}
    		if (zipCode != null) {
    			criteria.add(Restrictions.ilike("zipcode", zipCode + "%"));
    		}
     
    		return (List<Customer>) criteria.list();
    }
    Seule la recherche sur le champ companyName fonctionne car c'est un attribut de la classe Customer.

    Lorsque j'essaie de traiter des champs de la classe Address, voici l'erreur publiée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    could not resolve property: Address of: com.xx.be.Program.model.database.Customer

    Comment puis-je donc arriver à accéder à la première occurence de ma liste d'adresses ? J'imagine qu'il s'agit de quelque chose ressemblant à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	criteria.add(Restrictions.ilike("address[0].address1", address + "%"));

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Java Developer
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Java Developer
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut
    Comme bien souvent, il suffit de poster son problème sur un forum pour y trouver la solution peu de temps après par soi-même !

    Pour pouvoir créer des restrictions sur des tables associées, il faut créer un Criteria sur un Criteria.

    Dans le cas de Customer -> Address -> Zipcode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		Criteria criteria = session.createCriteria(Customer.class);
    		Criteria addressCriteria = criteria.createCriteria("address");
    		if (zipCode != null) {
    			addressCriteria.add(Restrictions.ilike("zipcode", zipCode + "%"));
    		}
    Voilà

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Recherche multicritères sur plusieurs tables
    Par bili31 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 07/03/2012, 20h17
  2. [MySQL] recherche multicritères sur plusieurs table
    Par rvm31 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 24/11/2007, 17h42
  3. recherche multicritères sur deux tables
    Par amélie22 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 11h59
  4. recherche multicritères sur plusieurs tables
    Par amélie22 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 09h48
  5. Recherche multicritère sur plusieurs tables
    Par Nabouille dans le forum Access
    Réponses: 3
    Dernier message: 12/04/2006, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo