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

Frameworks Web Java Discussion :

[Struts1 - Hibernate3] Conception DAO pour requête "filtre"


Sujet :

Frameworks Web Java

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Points : 416
    Points
    416
    Par défaut [Struts1 - Hibernate3] Conception DAO pour requête "filtre"
    Bonjour a tous,

    voila j'ai une question plutôt orientée conception. J'aimerais réaliser un code le plus proprement possible, j'ai quelques idées, mais elle ne me semble pas optimal, c'est pourquoi je demande votre avis.

    En fait j'ai une page, qui m'affiche une liste d'utilisateur, sur cette page ont a également des filtres (selon le profil utilisateur, son nom, etc....). Lorsque je soumet le formulaire mon ActionForm contient alors l'ensemble des valeurs du formulaire (dont certaines ne sont pas renseignées) et je passe tout cela dans une méthode construitRequete(String nom, String prenom, ...) qui pour chaque champs va vérifier si la variable contient une donnée et qui construit la requête adéquat en HQL.

    Cela ne me semble pas réellement optimisé, et j'aimerais avoir votre avis sur un tel solution ou sur une éventuelle autre méthode.

    Merci par avance.
    Jérémy
    Ingénieur Conception et Développement

  2. #2
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    L'Api criteria d'hibernate est sympathique pour cela.

    Si ton problème est au niveau du passage des paramètres de filtre aux couches inférieures et que pour X raisons tu ne veux pas que ton code utilise des API hibernate, tu peux créer un objet paramètre qui sert à indiquer les filtres à mettre en place. Quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UserFilter filter = new UserFilter();
    filter.addNameLike("Dupont%")
          .addCategoryEqualTo("Admin") ...
    Ca dépend tout de la flexibilité qu'il te faut en fait. Si passer les paramètres à une méthode getUsersList(String nameLike, String category) est suffisant, c'est plus simple et moins pénible à programmer, à toi de voir.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Points : 416
    Points
    416
    Par défaut
    oula, ce message commence à dater un peu...


    en fait mon message c'était plus pour avoir une idée de comment faire tout cela proprement. j'ai utilisé la solution que j'ai indiqué et cela fonctionne bien.

    sinon merci de ton message

    bonne continuation.
    Jérémy
    Ingénieur Conception et Développement

  4. #4
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Houla en effet,
    j'ai juste promener les yeux sur la page, sans regarder les dates.... Et visiblement y'a pas beaucoup d'activité en effet.

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 34
    Points : 5
    Points
    5
    Par défaut mapping hibernate
    salut j'ai un probleme de mapping sur hibernate j'ai 2 table
    Materiel et la table Type relation (1,1)(1,n) la je site les classes et les mapping
    classe Materiel
    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
    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
     
    public class Materiel implements Serializable {
     
    	private static final long serialVersionUID = 1L;
    	private long cod_mat ;
    	private String liste;
    	private String nom_mat;
    	private Date date_debut ;
    	private Date date_fin;
    	private String commentaire;
    	private double puissance;
    	private String societe;
    	private Centre centre;
    	private Type type;
     
     
     
    	public Type getType() {
    		return type;
    	}
    	public void setType(Type type) {
    		this.type = type;
    	}
     
     
    	public long getCod_mat() {
    		return cod_mat;
    	}
    	public void setCod_mat(long cod_mat) {
    		this.cod_mat = cod_mat;
    	}
    	public String getListe() {
    		return liste;
    	}
    	public void setListe(String liste) {
    		this.liste = liste;
    	}
    	public String getNom_mat() {
    		return nom_mat;
    	}
    	public void setNom_mat(String nom_mat) {
    		this.nom_mat = nom_mat;
    	}
    	public Date getDate_debut() {
    		return date_debut;
    	}
    	public void setDate_debut(Date date_debut) {
    		this.date_debut = date_debut;
    	}
    	public Date getDate_fin() {
    		return date_fin;
    	}
    	public void setDate_fin(Date date_fin) {
    		this.date_fin = date_fin;
    	}
    	public String getCommentaire() {
    		return commentaire;
    	}
    	public void setCommentaire(String commentaire) {
    		this.commentaire = commentaire;
    	}
    	public double getPuissance() {
    		return puissance;
    	}
    	public void setPuissance(double puissance) {
    		this.puissance = puissance;
    	}
    	public String getSociete() {
    		return societe;
    	}
    	public void setSociete(String societe) {
    		this.societe = societe;
    	}
     
    }
    Table Type
    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
    28
    29
    30
    31
     
    public class Type implements Serializable {
     
    	private static final long serialVersionUID = 1L;
    	private long cod_type;
    	private String reference;
    	Set<Materiel> materiel;
     
     
     
    	public Set<Materiel> getMateriel() {
    		return materiel;
    	}
    	public void setMateriel(Set<Materiel> materiel) {
    		this.materiel = materiel;
    	}
    	public long getCod_type() {
    		return cod_type;
    	}
    	public void setCod_type(long cod_type) {
    		this.cod_type = cod_type;
    	}
    	public String getReference() {
    		return reference;
    	}
    	public void setReference(String reference) {
    		this.reference = reference;
    	}
     
     
    }
    mapping materiel.hbm.xml
    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
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="com.file.Materiel" table="materiel">
    		<id name="cod_mat" type="long" column="cod_mat">
    			<generator class="native" />
    		</id>
    		<property name="liste" column="liste" />
    		<property name="nom_mat" column="nom_mat" />
    		<property name="date_debut" column="date_debut" />
    		<property name="date_fin" column="date_fin" />
    		<property name="commentaire" column="commentaire" />
    		<property name="puissance" column="puissance" />
    		<property name="societe" column="societe" />
    				<many-to-one name="type" not-null="true"    column="cod_type"></many-to-one>
    			</class>
    </hibernate-mapping>
    mapping type.hbm.xml

    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
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="com.file.Type" table="type">
    		<id name="cod_type" type="long" column="cod_type">
    			<generator class="native" />
    		</id>
    		<property name="reference" column="reference" />
    		<set name="materiel" inverse="true">
    			<key>
    				<column name="cod_mat" />
    			</key>
    			<one-to-many class="com.file.Materiel" />
    		</set>
    	</class>
    </hibernate-mapping>
    le probleme que je rencontre c'est que je recois tout les elementde l'objet type sur null quand je recupere list des materiels sCOnsult
    voila le code de recuperation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Session sesCOnsult = null;
    		List<Materiel> sCOnsult = null;
    		try {
    			SessionFactory sessionFactory = new Configuration().configure()
    					.buildSessionFactory();
    			sesCOnsult = sessionFactory.openSession();
    			Criteria crit = sesCOnsult.createCriteria(Materiel.class);
    			sCOnsult = crit.list();
     
    			request.setAttribute("sCOnsult", sCOnsult);
    			sesCOnsult.clear();
    			sessionFactory.close();
    je suis très disponible pour expliquer les chose qui ne sent pas claire
    merci d'avance

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

Discussions similaires

  1. aide pour requête de filtre
    Par Stéph utilisateur d'acces dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/06/2011, 11h42

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