Précédent   Forum des professionnels en informatique > Java > Général Java > Persistance > JPA
JPA Forum d'entraide sur l'API de persistance JPA (Java Persistence API)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/01/2012, 18h07   #1
Nouveau Membre du Club
 
Avatar de rgomes
 
Homme
IT Developer JAVA Senior
Inscription : juin 2004
Messages : 118
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : IT Developer JAVA Senior
Secteur : Service public

Informations forums :
Inscription : juin 2004
Messages : 118
Points : 39
Points : 39
Par défaut Séquence pour id de la classe abstraite

Hello,

Comment gérer de façon élégante la déclaration de la séquence, en particulier le tag @GeneratedValue, lorsque l'id est déclaré dans une classe mère abstraite :
Code :
1
2
3
4
5
6
7
8
 
@MappedSuperclass
public abstract class AbstractEntity implements Serializable {
 
	private static final long serialVersionUID = 1L;
 
	@Id
	private Integer entityId;
Code :
1
2
3
4
5
6
@Entity
@Table(name = "PARTENAIRE")
@SequenceGenerator(name = "PARTENAIRE_SEQ")
@AttributeOverrides({ @AttributeOverride(name = "entityId", column = @Column(name = "PARTENAIRE_ID")) })
public class PartenaireEntity extends AbstractEntity {
J'aimerais si possible éviter de mettre les annotations sur les getter (quelle est d'ailleurs la meilleure option getter ou variable ??) et d'avoir à overrider le getEntityId() à chaque fois..

Merci pour votre aide.
rgomes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 10h12   #2
Expert Confirmé
 
Homme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 2 258
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 2 258
Points : 2 578
Points : 2 578
Voila ce que j'avais utilisé dans mon cas :
Code :
1
2
3
4
5
6
7
8
9
10
@MappedSuperclass
public abstract class AbstractEntity implements Serializable {
 
	private static final long serialVersionUID = 1L;
 
	@Id
        @Column(name="COL_ID_FACTICE")
        @SequenceGenerator(name = "PARTENAIRE_SEQ", sequenceName="PARTENAIRE_SEQ", allocationSize=1)
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="PARTENAIRE_SEQ")
	private Integer entityId;
Et puis dans tes classes filles, t'aurais un truc comme ça :
Code :
1
2
3
4
5
@Entity
@Table(name = "PARTENAIRE")
@AttributeOverrides({ @AttributeOverride(name = "COL_ID_FACTICE", column = @Column(name = "PARTENAIRE_ID")) })
public class PartenaireEntity extends AbstractEntity {
...
DevServlet est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 10h21   #3
Nouveau Membre du Club
 
Avatar de rgomes
 
Homme
IT Developer JAVA Senior
Inscription : juin 2004
Messages : 118
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : IT Developer JAVA Senior
Secteur : Service public

Informations forums :
Inscription : juin 2004
Messages : 118
Points : 39
Points : 39
Citation:
Envoyé par DevServlet Voir le message
Voila ce que j'avais utilisé dans mon cas :
Code :
1
2
3
4
5
6
7
8
9
10
@MappedSuperclass
public abstract class AbstractEntity implements Serializable {
 
	private static final long serialVersionUID = 1L;
 
	@Id
        @Column(name="COL_ID_FACTICE")
        @SequenceGenerator(name = "PARTENAIRE_SEQ", sequenceName="PARTENAIRE_SEQ", allocationSize=1)
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="PARTENAIRE_SEQ")
	private Integer entityId;
Et puis dans tes classes filles, t'aurais un truc comme ça :
Code :
1
2
3
4
5
@Entity
@Table(name = "PARTENAIRE")
@AttributeOverrides({ @AttributeOverride(name = "COL_ID_FACTICE", column = @Column(name = "PARTENAIRE_ID")) })
public class PartenaireEntity extends AbstractEntity {
...

Surtout pas, la classe abstraite ne peut avoir la définition de la séquence qui est différente pour chaque entité.

J'ai trouvé la solution, il faut simplement :
Citation:
Dans la classe mère (AbstractEntity) :
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "MySequenceGenerator")

Dans la classe fille :
@Entity
@SequenceGenerator(name = "MySequenceGenerator", sequenceName = "<nom de la séquence>")
rgomes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 10h49   #4
Expert Confirmé
 
Homme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 2 258
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 2 258
Points : 2 578
Points : 2 578
Tant mieux si ta solution a marché, moi dans mon cas, effectivement c'est parceque j'avais la même séquence pour toutes les classes filles, ce qui me parait logique quand on hérite, c'est qu'on a en commun des propriétés identifiantes comme l'ID, sinon dans ton cas un Embedded d'attributs partagés aurait suffi. Mais bon tant mieux si ça marche.
DevServlet est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h30.


 
 
 
 
Partenaires

Hébergement Web