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 :

Mapping XML relationnel


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut Mapping XML relationnel
    Quelqu'un aurait un exemple complet de mapping xml avec hibernate.
    C'est à dire à partir d'un fichier xml de pouvoir alimenter une base de donnée, et inverssement (à partir des données de la base de donnée de pouvoir générer un fichier xml)

    Dans le cas d'un fichier fichier xml qui alimente qu'une seule table, il n'y a pas de soucis j'y arrive parfaitement. Mon problème vient lorsque je veux à partir du même fichier xml alimenter plusieurs tables. (en l'occurance 2).

    Je vous joins les sources en esperant que vous allez pouvoir me dire ce que je dois changer pour alimenter 2 tables à partir d'un seul fichier xml.

    le fichier XML (todo-ex.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
    <todolist>
    	<todo id="004" priority="2">
    		<sum>installer eclipse</sum>
    		<descr>une nouvelle version est disponible</descr>
    	</todo>
    	<todo id="005" priority="1">
    		<sum>redemarrer le serveur</sum>
    		<descr>une mise a jour du serveur tartenpion necessite un redemarrage</descr>
    	</todo>
    	<todo id="006" priority="3">
    		<sum>documentation du product</sum>
    		<descr>faire une documentation complete de notre super produit</descr>
    	</todo>
    </todolist>
    mappingXML/TodoTask.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
    <?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 package="bean">
       <class name="TodoTask" 
              table="todo_task" node="todo">
           <id name="todoid" node="@id"/>
           <property name="summary" not-null="true" node="sum"/>
           <property name="description" node="descr"/>
           <property name="priority" node="@priority"/>
           <property name="doneDate" column="done"/>
        </class>
     
    </hibernate-mapping>
    TodoTask.hmb.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
    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
     
    <hibernate-mapping package="com.hibernate">
    	<class
    		name="TodoTask"
    		table="todo_task"
    	>
    		<meta attribute="sync-DAO">false</meta>
     
    		<property
    			name="Todoid"
    			column="todoid"
    			type="java.lang.Long"
    			not-null="true"
    			length="4"
    		/>
    		<property
    			name="Summary"
    			column="summary"
    			type="string"
    			not-null="true"
    			length="45"
    		/>
    		<property
    			name="Description"
    			column="description"
    			type="string"
    			not-null="false"
    			length="45"
    		/>
    		<property
    			name="Priority"
    			column="priority"
    			type="java.lang.Long"
    			not-null="false"
    			length="4"
    		/>
    		<property
    			name="Done"
    			column="done"
    			type="timestamp"
    			not-null="false"
    			length="8"
    		/>
     
     
    	</class>	
    </hibernate-mapping>
    bean.TodoTask.java
    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
    package bean;
     
    import java.util.Calendar;
     
    public class TodoTask {
    	protected int todoid;
    	protected String summary;
    	protected String description;
    	protected int priority;
    	protected Calendar doneDate;
     
    	/**
             * @return Returns the description.
             */
    	public String getDescription() {
    		return description;
    	}
    	/**
             * @param description The description to set.
             */
    	public void setDescription(String description) {
    		this.description = description;
    	}
    	/**
             * @return Returns the doneDate.
             */
    	public Calendar getDoneDate() {
    		return doneDate;
    	}
    	/**
             * @param doneDate The doneDate to set.
             */
    	public void setDoneDate(Calendar doneDate) {
    		this.doneDate = doneDate;
    	}
    	/**
             * @return Returns the priority.
             */
    	public int getPriority() {
    		return priority;
    	}
    	/**
             * @param priority The priority to set.
             */
    	public void setPriority(int priority) {
    		this.priority = priority;
    	}
    	/**
             * @return Returns the summary.
             */
    	public String getSummary() {
    		return summary;
    	}
    	/**
             * @param summary The summary to set.
             */
    	public void setSummary(String summary) {
    		this.summary = summary;
    	}
    	/**
             * @return Returns the todoid.
             */
    	public int getTodoid() {
    		return todoid;
    	}
    	/**
             * @param todoid The todoid to set.
             */
    	public void setTodoid(int todoid) {
    		this.todoid = todoid;
    	}
    }
    la table todo_task
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE todo_task
    (
      todoid integer NOT NULL,
      summary character varying(200) NOT NULL,
      description character varying(200),
      priority integer,
      done timestamp without time zone,
      CONSTRAINT todo_task_pkey PRIMARY KEY (todoid)
    )
    Et voilà le code
    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
     
    public MappingXML(String file){
     
    		Configuration cfg = new Configuration()
    			.addResource(file) ;
     
    		cfg.configure() ;
    		sessionFactory = cfg.buildSessionFactory();
    	}
     
     
    public void insertXML(String file, String mapping, String XPath) {
     
    		SAXReader sr ;
    		Document doc ;
     
    		doc = null ;
    		sr = new SAXReader(false) ;
     
    		try {
    			doc = sr.read(ClassLoader.getSystemClassLoader().getResourceAsStream("file"));
    		} catch (DocumentException e1) {
    			log.log(Level.SEVERE, e1.getMessage());
    			e1.printStackTrace();
    		} 
     
    		List todo=doc.selectNodes(XPath);
     
    		Session session = sessionFactory.openSession();
    		Session xmlSession = session.getSession(EntityMode.DOM4J);
    		Transaction tx=session.beginTransaction();
     
    		for (Iterator it=todo.iterator(); it.hasNext(); ) {
    			xmlSession.saveOrUpdate(mapping,it.next());
    		}
     
    		tx.commit();
    		session.close();
    	}
     
    public static void main(String[] args) {
                    MappingXML mapxml = new MappingXML("mappingXML/Todo.hbm.xml");
                    mapxml .insertXML(todo-ex.xml, "bean.TodoTask", "//todo");
    }
    Ca ca marche trés bien les données du fichier xml se retrouve bien dans ma base de donné. Mais maintenant imaginons par exemple que je veuille gérer des catégories.

    Pouvais vous me dire les modification à apporter dans toutes ces pages pour que le résultat soit le même avec le même mode opératoire.

    Imaginons donc 1 table supplémentaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE cat_task
    (
      catid integer NOT NULL,
      libellecharacter varying(200) NOT NULL,
      CONSTRAINT cat_task_pkey PRIMARY KEY (catid )
    )
    et un champs supplémentaire dans la table todo_task
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE todo_task
    (
      todoid integer NOT NULL,
      summary character varying(200) NOT NULL,
      description character varying(200),
      priority integer,
      done timestamp without time zone,
      cat_id integer NOT NULL,
      CONSTRAINT todo_task_pkey PRIMARY KEY (todoid)
    )
    et bien sur cat_id est la clé etrangére de la table cat_task

    Je vous donne également un exemple du nouveau 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
    17
    <todolist>
    	<todo id="004" priority="2">
    		<sum>installer eclipse</sum>
    		<descr>une nouvelle version est disponible</descr>
                    <cat>Divers</cat>
    	</todo>
    	<todo id="005" priority="1">
    		<sum>redemarrer le serveur</sum>
    		<descr>une mise a jour du serveur tartenpion necessite un redemarrage</descr>
                    <cat>Boulot</cat>
    	</todo>
    	<todo id="006" priority="3">
    		<sum>documentation du product</sum>
    		<descr>faire une documentation complete de notre super produit</descr>
                     <cat>Boulot</cat>
    	</todo>
    </todolist>
    Merci de votre aide

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Vraiment personne pour m'aider ?

Discussions similaires

  1. Réponses: 14
    Dernier message: 21/02/2010, 19h02
  2. [MAPFORCE] EDIFACT et mapping XML
    Par ujoodha dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 14/10/2009, 15h30
  3. [JRE1.4 Eclipse3.1.1 Hibernate3.1] Mapping XML
    Par mow dans le forum Hibernate
    Réponses: 2
    Dernier message: 08/10/2006, 13h20
  4. [SQL] Abstraction BDD et mapping objet/relationnel
    Par Invité dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/07/2006, 13h35
  5. [Java] Mapping XML <> Java
    Par webspeak dans le forum Persistance des données
    Réponses: 7
    Dernier message: 22/06/2006, 00h07

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