Bonjour à tous,
j'aimerais savoir si on peut utiliser hibernate avec des tables qui n'ont pas de clé primaire?
Merci à tous.
Bonjour à tous,
j'aimerais savoir si on peut utiliser hibernate avec des tables qui n'ont pas de clé primaire?
Merci à tous.
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!
C'est possible mais découragé:
http://www.hibernate.org/hib_docs/v3...on-compositeid
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:
J'obtiens une erreur du genre :
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(); } }
Et voici le contenu de mon fichier Personne.hbm,
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
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
Tu utilises quelle version d'Hibernate, car ton mapping est déclaré en 2.0 ?
Partager