-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 
Author Message
 Post subject: Mapper dynamiquement des class
PostPosted: Tue Jan 17, 2006 6:22 am 
Newbie

Joined: Tue Jan 17, 2006 6:09 am
Posts: 15
Bonjour à tous,

Typiquement, pour Hibernate, on a un classe POJO et un fichier XML de configuration du mapping.

Dans mon cas, j'aimerais avoir la possibilité de modifier à la volée le mapping de facon programmable; je donne un exemple simple pour simplifier, j'ai :

Quote:
<class
name="monsite.hibernate.Newsletter"
table="newsletter"
>

<id
name="id"
type="int"
column="id"
>
<generator class="assigned" />
</id>

<id
name="newsletterid"
type="int"
column="newsletterid"
>
<generator class="sequence" >
<param name="sequence">newsletter_id_seq</param>
</generator>
</id>
</class>


La séquence associée à la clef primaire est donc newsletter_id_seq, est t'il techniquement possible dans Hibernate de modifier à la volée quand je le souhaiterais le nom de la séquence associé à cette clef primaire.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jan 17, 2006 6:38 am 
Newbie

Joined: Tue Jan 17, 2006 6:09 am
Posts: 15
Désolé, j'ai posté mon précédent message trop rapidement (je pensais pouvoir l'éditer par la suite ce qui n'est apparemment pas le cas). Je reposte donc le problème que j'évoquais puisque le premier message est faux :

Typiquement, pour Hibernate, on a une classe POJO et un fichier XML de configuration du mapping.

Dans mon cas, j'aimerais avoir la possibilité de modifier à la volée le mapping de façon programmable; je donne un exemple simple pour simplifier, j'ai :


Quote:
<class
name="monsite.hibernate.Newsletter"
table="newsletter"
>
<id
name="newsletter_id"
type="int"
column="id"
>
<generator class="native" />
</id>

</class>



La séquence associée à la clef primaire est assignée à la BD. Est t'il techniquement possible dans Hibernate d'ajouter à la volée quand je le souhaite un nom de séquence de tel sorte que mon mapping ressemble à :

Quote:
<class
name="monsite.hibernate.Newsletter"
table="newsletter"
>

<id
name="newsletter_id"
type="int"
column="id"
>
<generator class="sequence" >
<param name="sequence">newsletter_id_seq</param>
</generator>
</id>
</class>


Top
 Profile  
 
 Post subject:
PostPosted: Tue Feb 07, 2006 2:04 pm 
Newbie

Joined: Tue Feb 07, 2006 2:00 pm
Posts: 5
Bonsoir,


essaye de regarder du cote de la classe Dialect
moi par exemple j'ai surchargé la methode
getSequenceNextValString de la classe PostgreSQLDialect
de façon a pouvoir rajouter devant le nom de la sequence un nom
de schema dynamique.

J'espere que ca peut t'aider !!

++


Top
 Profile  
 
 Post subject:
PostPosted: Tue Feb 21, 2006 8:10 am 
Beginner
Beginner

Joined: Thu Feb 16, 2006 9:53 am
Posts: 24
sebastienX wrote:
Est t'il techniquement possible dans Hibernate d'ajouter à la volée quand je le souhaite un nom de séquence


Il est possible de passer un Document à l'objet Configuration.
Ainsi tu peux parser le fichier de mapping et modifier le nom de ta séquence, puis construire la SessionFactory.
La seule restriction est qu'il faut reconstruire la SessionFactory pour changer la séquence.
Cette méthode est-elle sufisament dynamique?


Une solution similaire serait de déclarer le nom de ta séquence comme entité dans une DTD perso. En important cette DTD dans le fichier mapping, tu n'a plus qu'à utiliser l'entité dans ton fichier xml.

Par exemple
Code:
<!DOCTYPE hibernate-mapping SYSTEM
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
[
<!ENTITY % globals   SYSTEM "(..)/(..)/globals.dtd">
%globals;
]>
[/quote]


Top
 Profile  
 
 Post subject:
PostPosted: Tue Feb 21, 2006 8:21 am 
Beginner
Beginner

Joined: Thu Feb 16, 2006 9:53 am
Posts: 24
Une autre solution serait de définir ton propre générateur d'id.
Il suffit d'implémenter l'interface org.hibernate.id.IdentifierGenerator.

Dans ton cas peut etre suffirait-il d'étendre la classe org.hibernate.id.SequenceGenerator de manière à y gérer un nom de séquence dynamique.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Feb 22, 2006 4:54 am 
Newbie

Joined: Tue Jan 17, 2006 6:09 am
Posts: 15
Merci à tous pour vos réponses, je vais essayer d'implémenter l'interface org.hibernate.id.IdentifierGenerator


Top
 Profile  
 
 Post subject:
PostPosted: Wed Feb 22, 2006 5:44 am 
Beginner
Beginner

Joined: Thu Feb 16, 2006 9:53 am
Posts: 24
sebastienX wrote:
Merci à tous pour vos réponses, je vais essayer d'implémenter l'interface org.hibernate.id.IdentifierGenerator



Sans vouloir faire l'avare, merci de noter les réponses. Je vais bientôt avoir épuiser mes crédits! :o)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.