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 :

Hibernate sans clé primaire


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Par défaut Hibernate sans clé primaire
    Bonjour à tous,
    j'aimerais savoir si on peut utiliser hibernate avec des tables qui n'ont pas de clé primaire?

    Merci à tous.

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Par défaut
    En lisant les docs et des livres sur hibernate, je ne trouve toujours pas une réponse à ma question. En fait dans tous les exemples, toutes les tables ont une clé primaire. Donc je suppose qu'on ne peut pas utiliser hibernate sans clé primaire. Est-vraie ?

    Merci de votre réponse car je fais une étude sur les frameworks que je vais utiliser pour mon projet. L'un de mes objectifs était d'utiliser hibernate mais si cette contrainte de clé primaire s'avère vraie, je l'ai dans l'os car il n'est pas question de touchée aux tables de la base qui existent depuis longtemps et qui sont utilisées par d'autres apllications.

    J'attends vos réponses!

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    C'est tout à fait possible, la contrainte étant qu'il va utiliser un pojo qui n'a qu'une propriété id avec tous les champs liés à id.
    (J'ai déjà utilisé, ça fonctionne)
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    C'est tout à fait possible, la contrainte étant qu'il va utiliser un pojo qui n'a qu'une propriété id avec tous les champs liés à id.
    (J'ai déjà utilisé, ça fonctionne)
    A+
    Merci de vos réponses,
    mais je ne comprends pas trop ce que tu veux dire OButterlin. Peux tu me montrer à quoi ressemblera mon pojo? Par exemple si j'ai une table nommée Personne avec 3 champs nom (integer), prenom(string) et adresse (string).

    Je fais une démo avec Mysql :
    Dans un premier temps, je définis la table sans clé primaire. Je fais une classe test:

    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
     
    public class Test {
     
    	public static void main(String[] args)throws HibernateException {
     
    		Session session = HibernateUtil.currentSession();
    		Transaction tx = session.beginTransaction();
     
    		Personne personne = new Personne();
    		personne.setAdresse("R.A.S");
    		personne.setPrenom("toto");
    		session.save(personne);
    		tx.commit();
     
    		System.out.println("it works");
     
    		List list = session.find("from Personne");
    		Iterator it = list.iterator();
    		while(it.hasNext())
    		{
    			Personne utilisat = (Personne)it.next();
    		        System.out.println(utilisat.getNom());
    		        System.out.println(utilisat.getAdresse());
    		        System.out.println(utilisat.getPrenom());
    		}
     
    		HibernateUtil.closeSession();
    	}
     
    }
    J'obtiens une erreur du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    GRAVE: Error parsing XML: XML InputStream(29) The content of element type "class" must match "(meta*,(cache|jcs-cache)?,(id|composite-id),discriminator?,(version|timestamp)?,(property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|idbag|array|primitive-array)*,(subclass*|joined-subclass*))".
    Exception in thread "main" java.lang.ExceptionInInitializerError
    	at Test.main(Test.java:13)
    Caused by: java.lang.RuntimeException: Problème de configuration : Error reading resource: Personne.hbm
    	at com.test.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:16)
    	... 1 more
    Caused by: net.sf.hibernate.MappingException: Error reading resource: Personne.hbm
    Et voici le contenu de mon fichier Personne.hbm,
    Code xml : 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
     
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
     
    <hibernate-mapping package="com.yaya.hibernate">
    	<class name="Personne" table="personne">
    		<property
    			column="adresse"
    			length="15"
    			name="Adresse"
    			not-null="true"
    			type="string"
    		 />
    		<property
    			column="prenom"
    			length="20"
    			name="Prenom"
    			not-null="true"
    			type="string"
    		 />
    		<property
    			column="nom"
    			length="20"
    			name="Nom"
    			not-null="true"
    			type="integer"
    		 />
    	</class>
    </hibernate-mapping>

    Ensuite je modifie la table en mettant comme clé primaire nom (qui est en fait un integer). Alors comme par maggie, tout marche.
    Voici le contenu de mon nouveau fichier Personne.hbm:
    Code xml : 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
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
     
    <hibernate-mapping package="com.yaya.hibernate">
    	<class name="Personne" table="personne">
    		<id
    			column="nom"
    			name="Nom"
    			type="integer"
    		>
    			<generator class="vm" />
    		</id>
    		<property
    			column="adresse"
    			length="15"
    			name="Adresse"
    			not-null="true"
    			type="string"
    		 />
    		<property
    			column="prenom"
    			length="20"
    			name="Prenom"
    			not-null="true"
    			type="string"
    		 />
    	</class>
    </hibernate-mapping>

    Donc je reintère ma question, est-ce possible de faire mapper les tables qui n'ont pas de clé primaire? Apparemment la réponse est oui pour vous. Mais après cette petite démo, je ne sais pas quoi penser. Pouvez vous me détailler un peu plus s'il vous plait, comment est-ce possible?

    Merci

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Tu utilises quelle version d'Hibernate, car ton mapping est déclaré en 2.0 ?

Discussions similaires

  1. Utiliser Hibernate sans clé primaire
    Par bruno.getJava() dans le forum Hibernate
    Réponses: 10
    Dernier message: 04/01/2011, 11h44
  2. Suppression doublon sans clé primaire
    Par qbihlmaier dans le forum Access
    Réponses: 6
    Dernier message: 21/03/2007, 10h53
  3. Différence de tables sans clé primaire
    Par Nicola dans le forum Access
    Réponses: 2
    Dernier message: 19/09/2006, 17h22
  4. Mapper une table sans clé primaire
    Par rosros dans le forum Hibernate
    Réponses: 4
    Dernier message: 14/09/2006, 15h16
  5. [Hibernate] Mapper une table sans clé primaire
    Par neuromencien dans le forum Hibernate
    Réponses: 4
    Dernier message: 13/06/2006, 17h05

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