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 :

Utilisation d'Hibernate dans un projet déjà existant


Sujet :

Hibernate Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut Utilisation d'Hibernate dans un projet déjà existant
    Bonjour à tous,

    J'ai un projet sur la compta que je voudrais mettre a jour avec l'utilisation d'Hibernate.
    Ce projet déjà existant s'appuie sur une couche DAO:
    Il existe 2 classes par tables.
    Exemple: Eleve.java et EleveDAO.java
    La classe Eleve donne tous les attributs de la table Eleve et la classe EleveDAO comprend toutes les requetes SQL concernant cette table.

    La base de donnée concerné est MYSQL.
    Ne connaissant pas Hibernate, je me suis renseigné mais il me manque des informations:
    1-J'ai vu que pour se connecter Hibernate a besoin d'un fichier XML, le premier problème est que je n'ai pas d'identifiant fixe, car tous simplement, la base est distante et re-configurable.
    Peut on se passer de ce fichier XML?

    2-J'en viens toute suite au problème de mapping, car dans ce fichier XML, je déclarais les tables avec les classes pilotes.
    N'ayant pas de fichier xml, comment je ré-attribut le mapping des tables?

    3-Comment reconstruire les classes existantes?
    Dois-je laisser toujours 2 classes par table et je reconstruit uniquement la classe TableDAO?

    4-Le projet existant emploi uniquement des requêtes préparés. Avec parfois des requêtes plus ou moins complexe en SQL
    exemple d'une méthode permettant de faire des statistiques:
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    public ArrayList<ArrayList<Object>> select_date(String date_debut, String date_fin, int id_operations, int id_filtres, int id_sous_filtres, int id_fournisseur, String mode_date, boolean bool_saison, Datetime datetime_saison) {
    		ArrayList<ArrayList<Object>> requete = new ArrayList<ArrayList<Object>>();
    		String champ_date="";
    		String champ_fournisseur=(id_fournisseur!=0)?"AND `id_fournisseur`="+id_fournisseur:"";
    		String champ_operation=(id_operations!=0)?"AND `id_type_paiement`="+id_operations:"";
    		String champ_filtre=(id_filtres!=0)?"AND (CASE WHEN aa.id_filtre IS NULL THEN od.id_filtre ELSE aa.id_filtre END)="+id_filtres:"";
    		String champ_sous_filtre=(id_sous_filtres!=0)?"AND (CASE WHEN aa.id_sous_filtre IS NULL THEN od.id_sous_filtre ELSE aa.id_sous_filtre END)="+id_sous_filtres:"";
    		String saison="", group_by="", frais_fixe="", frais_non_fixe="", nom_filtre="", jointure_od="", jointure_aa="";
    		if(bool_saison){
    			champ_date="od.date,";
    			saison=",CASE WHEN MONTH(od.date) > "+(datetime_saison.getMois())+" THEN CONCAT(YEAR(od.date), '-', YEAR(od.date) + 1) " +
    					"WHEN MONTH(od.date) = "+(datetime_saison.getMois())+" AND DAY(od.date)>= "+(datetime_saison.getJour_du_mois())+" THEN CONCAT(YEAR(od.date), '-', YEAR(od.date) + 1) " +
    					"ELSE CONCAT(YEAR(od.date) - 1, '-', YEAR(od.date)) END AS Saison";
    			group_by= "GROUP BY Saison";
    		}
    		else if(mode_date.equals("sansgroupby")){
    			group_by="";
    			jointure_od="LEFT JOIN filtres od_ft ON od_ft.id=od.id_filtre ";
    			jointure_aa="LEFT JOIN filtres aa_ft ON aa_ft.id=aa.id_filtre ";
    			if(id_filtres!=0 || id_sous_filtres!=0){
    				frais_fixe=",SUM(CASE WHEN od.id_achat_articles<>0 THEN (CASE WHEN aa_ft.frais_fixe=1 THEN aa.montant ELSE 0 END) ELSE (CASE WHEN od_ft.frais_fixe=1 THEN od.debit ELSE 0 END) END) AS frais_fixe,";
    				frais_non_fixe="SUM(CASE WHEN od.id_achat_articles<>0 THEN (CASE WHEN aa_ft.frais_fixe=0 THEN aa.montant ELSE 0 END) ELSE (CASE WHEN od_ft.frais_fixe=0 THEN od.debit ELSE 0 END) END) AS frais_non_fixe";
    			}
    			else{
    				frais_fixe=",SUM(CASE WHEN od.id_achat_articles<>0 THEN od.montant_total ELSE (CASE WHEN od_ft.frais_fixe=1 THEN od.montant_total ELSE 0 END) END) AS frais_fixe,";
    				frais_non_fixe="SUM(CASE WHEN od_ft.frais_fixe=0 THEN od.montant_total ELSE 0 END) AS frais_non_fixe";
    			}
    		}
    		else if(mode_date.equals("groupbyFiltre")){
    			champ_date="od.date,";
    			jointure_od="LEFT JOIN filtres od_ft ON od_ft.id=od.id_filtre ";
    			jointure_aa="LEFT JOIN filtres aa_ft ON aa_ft.id=aa.id_filtre ";
    			frais_fixe=",SUM(CASE WHEN od.id_achat_articles<>0 THEN (CASE WHEN aa_ft.frais_fixe=1 THEN aa.montant ELSE 0 END) ELSE (CASE WHEN od_ft.frais_fixe=1 THEN od.debit ELSE 0 END) END) AS frais_fixe,";
    			frais_non_fixe="SUM(CASE WHEN od.id_achat_articles<>0 THEN (CASE WHEN aa_ft.frais_fixe=0 THEN aa.montant ELSE 0 END) ELSE (CASE WHEN od_ft.frais_fixe=0 THEN od.debit ELSE 0 END) END) AS frais_non_fixe";
    			nom_filtre=",(CASE WHEN od.id_achat_articles<>0 THEN aa_ft.nom ELSE od_ft.nom END) AS nom_filtre";
    			group_by="GROUP BY nom_filtre";// Groupemement par Filtre
    		}
    		else if(mode_date.equals("groupbySousFiltre")){
    			champ_date="od.date,";
    			jointure_od="LEFT JOIN filtres od_ft ON od_ft.id=od.id_filtre LEFT JOIN filtres_sous_filtres od_sft ON od_sft.id=od.id_sous_filtre ";
    			jointure_aa="LEFT JOIN filtres aa_ft ON aa_ft.id=aa.id_filtre LEFT JOIN filtres_sous_filtres aa_sft ON aa_sft.id=aa.id_sous_filtre ";
    			frais_fixe=",SUM(CASE WHEN od.id_achat_articles<>0 THEN (CASE WHEN aa_ft.frais_fixe=1 THEN aa.montant ELSE 0 END) ELSE (CASE WHEN od_ft.frais_fixe=1 THEN od.debit ELSE 0 END) END) AS frais_fixe,";
    			frais_non_fixe="SUM(CASE WHEN od.id_achat_articles<>0 THEN (CASE WHEN aa_ft.frais_fixe=0 THEN aa.montant ELSE 0 END) ELSE (CASE WHEN od_ft.frais_fixe=0 THEN od.debit ELSE 0 END) END) AS frais_non_fixe";
    			nom_filtre=",(CASE WHEN (CASE WHEN od.id_achat_articles<>0 THEN aa_sft.nom ELSE od_sft.nom END) IS NULL THEN (CASE WHEN od.id_achat_articles<>0 THEN aa_ft.nom ELSE od_ft.nom END) ELSE (CASE WHEN od.id_achat_articles<>0 THEN aa_sft.nom ELSE od_sft.nom END) END) AS nom_sousfiltre";
    			group_by="GROUP BY nom_sousfiltre";// Groupemement par Sous-Filtre
    		}
    		else if(mode_date.equals("groupbyFournisseurs")){
    			champ_date="od.date,";
    			jointure_od="LEFT JOIN filtres od_ft ON od_ft.id=od.id_filtre ";
    			jointure_aa="LEFT JOIN filtres aa_ft ON aa_ft.id=aa.id_filtre LEFT JOIN fournisseurs fs ON fs.id=od.id_fournisseur ";
    			frais_fixe=",SUM(CASE WHEN od.id_achat_articles<>0 THEN (CASE WHEN aa_ft.frais_fixe=1 THEN aa.montant ELSE 0 END) ELSE (CASE WHEN od_ft.frais_fixe=1 THEN od.debit ELSE 0 END) END) AS frais_fixe,";
    			frais_non_fixe="SUM(CASE WHEN od.id_achat_articles<>0 THEN (CASE WHEN aa_ft.frais_fixe=0 THEN aa.montant ELSE 0 END) ELSE (CASE WHEN od_ft.frais_fixe=0 THEN od.debit ELSE 0 END) END) AS frais_non_fixe";
    			nom_filtre=",fs.nom AS nom_fournisseurs";
    			group_by="GROUP BY nom_fournisseurs";// Groupemement par Fournisseurs
    		}
    		else{
    			champ_date="od.date,";
    			group_by="GROUP BY "+mode_date;
    		}
    		String requete_sql=(id_filtres!=0 || id_sous_filtres!=0 || mode_date.equals("groupbyFiltre") || mode_date.equals("groupbySousFiltre") || mode_date.equals("groupbyFournisseurs"))?
    				//avec filtre
    				"SELECT "+champ_date+" COUNT(od.id) AS nombre, " +
                	"SUM(CASE WHEN od.id_achat_articles<>0 THEN aa.montant ELSE od.debit END) AS depense, " +
                	"SUM(CASE WHEN od.id_type_paiement = 1 THEN (CASE WHEN od.id_achat_articles<>0 THEN aa.montant ELSE od.debit END) ELSE 0 END) AS depense_liquide  "+saison+" "+frais_fixe+" "+frais_non_fixe+" "+nom_filtre+" " +
                	"FROM operation_depenses od " +
                	"LEFT JOIN achat_articles aa ON aa.id_achat=od.id_achat_articles " +
                	" "+jointure_od+" "+jointure_aa+" " +
                	"WHERE (od.date BETWEEN '"+date_debut+"' AND '"+date_fin+"') "+champ_fournisseur+" "+champ_operation+" "+champ_filtre+" "+champ_sous_filtre+" " +
                	""+group_by+"":
                	//aucun filtre	
    				"SELECT "+champ_date+" COUNT(od.id) AS nombre, " +
                	"SUM(od.montant_total) AS depense, " +
                	"SUM(CASE WHEN od.id_type_paiement = 1 THEN od.montant_total ELSE 0 END) AS depense_liquide  "+saison+" "+frais_fixe+" "+frais_non_fixe+" " +
                	"FROM operation_depenses od " +
                	" "+jointure_od+" " +
                	"WHERE (od.date BETWEEN '"+date_debut+"' AND '"+date_fin+"') "+champ_fournisseur+" "+champ_operation+" " +
                	""+group_by+"";
     
    		connect= JdbcConnector.getInstance();
    		try {
    			try {
                	prepare = this.connect.prepareStatement(requete_sql);
                	System.out.println("//////////////REQUETE/////////////");
                	System.out.println(requete_sql);
                	System.out.println("//////////////FIN REQUETE/////////////");
     
    				//On exécute la requête
    				resultat = prepare.executeQuery();
    				int i=0;
    				while(resultat.next()){
    					requete.add(i, new ArrayList<Object>());
    					if(mode_date.equals("sansgroupby")){
    						requete.get(i).add(0, "");
    					}
    					else{
    						requete.get(i).add(0, resultat.getString("od.date"));
    					}
    	            	requete.get(i).add(1, resultat.getInt("nombre"));
    	            	requete.get(i).add(2, resultat.getFloat("depense"));
    	            	requete.get(i).add(3, resultat.getFloat("depense_liquide"));
    	            	if(bool_saison){
    	            		requete.get(i).add(4, resultat.getString("Saison"));
    	            	}
    	            	else if(mode_date.equals("sansgroupby") || mode_date.equals("groupbyFiltre") || mode_date.equals("groupbySousFiltre") || mode_date.equals("groupbyFournisseurs")){
    	            		requete.get(i).add(4, resultat.getFloat("frais_fixe"));
    	            		requete.get(i).add(5, resultat.getFloat("frais_non_fixe"));
    		            	if(mode_date.equals("groupbyFiltre")){
    		            		requete.get(i).add(6, resultat.getString("nom_filtre"));
    		            	}
    		            	if(mode_date.equals("groupbySousFiltre")){
    		            		requete.get(i).add(6, resultat.getString("nom_sousfiltre"));
    		            	}
    		            	if(mode_date.equals("groupbyFournisseurs")){
    		            		requete.get(i).add(6, resultat.getString("nom_fournisseurs"));
    		            	}
    	            	}
    					i++;
    				}
     
    			} catch (SQLException e) {
    				e.printStackTrace();
    			} finally {
    				if (resultat != null) {
    					resultat.close();
    				}
    				if (prepare != null) {
    					prepare.close();
    				}  
    				if (connect != null) {
    					connect.close();
    				} 
    			}
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return requete;
    	}
    J'en viens a la question concernant le HQL, n'ayant jamais utiliser ce langage puis-je faire des requêtes similaires?

    5-J'utilise un pool de connections avec C3P0.
    Peut on utiliser C3P0 avec Hibernate?

    Merci pour vos réponses

  2. #2
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Bonjour,
    J'ai actuellement des problèmes avec une requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FATAL - Exception in thread "AWT-EventQueue-0" 
    FATAL - org.hibernate.hql.ast.QuerySyntaxException: expecting OPEN, found 'VALUE' near line 1, column 28 [INSERT INTO achat_articles VALUE (?,?,?,?,?,?,?,?,?,?,?,?,?,?)]

    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
    public boolean insert(Achat_articles obj) {
    		Session session = HibernateUtils.currentSession();
    		Transaction tx = session.beginTransaction();
     
    		session.createQuery("INSERT INTO achat_articles VALUE (?,?,?,?,?,?,?,?,?,?,?,?,?,?)")
            .setString(0, null)
            .setInteger(1, obj.getId_articles())
            .setInteger(2, obj.getId_doses())
            .setInteger(3, obj.getLots())
            .setInteger(4, obj.getQuantites_par_lots())
            .setFloat(5, obj.getPrix_reel_par_lots())
            .setInteger(6, obj.getQuantites_totales())
            .setFloat(7, obj.getMontant())
            .setFloat(8, obj.getValeur_vente())
            .setInteger(9, obj.getId_achat())
            .setInteger(10, obj.getId_filtre())
            .setInteger(11, obj.getId_sous_filtre())
            .setString(12,  obj.getCommentaires())
            .setString(13,  obj.getDate())
            .executeUpdate();
     
    		tx.commit();
    		// Fermeture de la session Hibernate
    		HibernateUtils.closeSession();
    		return false;
    	}
    Voici mon fichier 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
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     
    <hibernate-configuration>
      <session-factory>
        <!--  Paramètres de connexion à la base de données -->
     
        <!-- Comportement pour la conservation des tables -->
     
        <!-- Fichiers à mapper -->
     
     
      </session-factory>
    </hibernate-configuration>
    La classe de connections:
    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
    public class HibernateUtils {
    	private static final SessionFactory sessionFactory;
    	private static String serveur;
    	private static String base;
    	private static String utilisteur;
    	private static String passe;
     
    		static {
    			//On regarde les préférences:
    			Serializer<Preferences> preferences = new Serializer<Preferences>(new File("file/Pito.lic"));
    			preferences.lectureserialize();
    			Serializer<Licence> licence = new Serializer<Licence>(new File("file/sack.lic"));
    			licence.lectureserialize();
    			serveur=(licence.getObject()!=null && licence.getObject().getType_licence().equals("normal"))?"localhost":preferences.getObject().getServeur();
    			base = preferences.getObject().getBase();
    			utilisteur=preferences.getObject().getUtilisateur();
    			passe=preferences.getObject().getPassword();
     
    			try {
    				Configuration cfg = new Configuration()
    				.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver")
    				.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect")
    				.setProperty("hibernate.connection.url", "jdbc:mysql://"+serveur+"/"+base)
    				.setProperty("hibernate.connection.username", utilisteur)
    				.setProperty("hibernate.connection.password", passe);
     
    				// Crée la SessionFactory
    				sessionFactory =  cfg.configure().buildSessionFactory();
     
    			} catch (HibernateException ex) {
    				throw new RuntimeException("Problème de configuration : "+ ex.getMessage(), ex);
    			}
    		}
     
    	@SuppressWarnings("rawtypes")
    	public static final ThreadLocal session = new ThreadLocal();
     
    	@SuppressWarnings("unchecked")
    	public static Session currentSession() throws HibernateException {
    		Session s = (Session) session.get();
    		// Ouvre une nouvelle Session, si ce Thread n'en a aucune
    		if (s == null) {
    			s = sessionFactory.openSession();
    			session.set(s);
    		}
    		return s;
    	}
     
    	@SuppressWarnings("unchecked")
    	public static void closeSession() throws HibernateException {
    		Session s = (Session) session.get();
    		session.set(null);
    		if (s != null)
    			s.close();
    	}
    }
    Merci pour votre aide

Discussions similaires

  1. [NVSG] Utilisation du NVSG dans vos projets
    Par Kurisu dans le forum API graphiques
    Réponses: 0
    Dernier message: 12/12/2008, 16h30
  2. Réponses: 10
    Dernier message: 12/12/2006, 02h44
  3. [MFC] Utiliser la MFC dans un projet ATL
    Par glKabuto dans le forum MFC
    Réponses: 6
    Dernier message: 24/04/2006, 16h17
  4. [SVN] Importer dans un projet déjà existant
    Par iubito dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/04/2006, 09h16
  5. Réponses: 2
    Dernier message: 26/09/2005, 09h29

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