Bonjour,
Dans l'exemple suivant, je souhaite conserver l'ordre des loisirs.
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Entity @Table(name = "personne") public class Personne { @OneToMany(fetch = FetchType.LAZY) @JoinTable(name = "loisir_personne", joinColumns = {@JoinColumn(name = "personne", nullable = false, updatable = false)}, inverseJoinColumns = {@JoinColumn(name = "loisir", nullable = false, updatable = false)}) @OrderColumn(name = "idx") private List<Loisir> loisirs = new ArrayList<Loisir>(0); }
L'enregistrement et la récupération marche bien, mais si je change l'ordre de la liste je reçois un message de violation de clé primaire:
Dans ce cas Hibernate essaye de faire un update:
Code : Sélectionner tout - Visualiser dans une fenêtre à part ERROR: duplicate key value violates unique constraint "pk_loisir_personne" DétailÂ*: Key (personne, loisir)=(11900, 4) already exists.
Alors que sans le @OrderColumn, il supprime puis fait un insert (dans ce cas je n'ai pas de message d'erreur évidemment)
Code : Sélectionner tout - Visualiser dans une fenêtre à part Hibernate: update madb.loisir_personne set loisir=? where personne=? and idx=?
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 @OneToMany(fetch = FetchType.LAZY) @JoinTable(name = "loisir_personne", joinColumns = {@JoinColumn(name = "personne", nullable = false, updatable = false)}, inverseJoinColumns = {@JoinColumn(name = "loisir", nullable = false, updatable = false)}) //@OrderColumn(name = "idx") private List<Loisir> loisirs = new ArrayList<Loisir>(0);
Est-ce que quelqu'un aurait une solution?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Hibernate: delete from madb.loisir_personne where personne=? Hibernate: insert into madb.loisir_personne (personne, loisir) values (?, ?) Hibernate: insert into madb.loisir_personne (personne, loisir) values (?, ?) Hibernate: insert into madb.loisir_personne (personne, loisir) values (?, ?)
Merci.
SQL:
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE TABLE madb.loisir_personne ( personne numeric(10,0) NOT NULL, loisir numeric(5,0) NOT NULL, idx numeric(2,0) NOT NULL DEFAULT 0, CONSTRAINT pk_loisir_personne PRIMARY KEY (personne, loisir), CONSTRAINT fk_loispers_pers FOREIGN KEY (personne) REFERENCES madb.personne (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE RESTRICT, CONSTRAINT fk_loispers_lois FOREIGN KEY (loisir) REFERENCES madb.loisir (id) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT )
-----------------------
DB: PostgreSQL v 9.2
Hibernate v 4.2.1.Final
Partager