Bonsoir,
Depuis quelques jours j'essaye de trouver une solution à mon problème mais j'arrive pas à le résoudre
J'essaye de créer une interface web de création de zone qui contient plusieurs stations (une zone peut contenir plusieurs stations et une station ne peut appartenir qu'a une seule zone)
sql
j'ai trois classes zone, zoneStation et zoneStationId
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE "ZONE"( "IZONE_ID" NUMBER(*,0) NOT NULL, "SZONE_NAME" VARCHAR2(20) NOT NULL UNIQUE, CONSTRAINT PK_ZONES PRIMARY KEY ("IZONE_ID") ); CREATE TABLE "ZONE_STATION"( "IZONE_ID" NUMBER(*,0) NOT NULL, "SSTATION_CODE" VARCHAR2(3 CHAR) NOT NULL, CONSTRAINT PK_ZONE_STATION PRIMARY KEY ("IZONE_ID","SSTATION_CODE"), CONSTRAINT ZONE_FK FOREIGN KEY ("IZONE_ID") REFERENCES "ZONE" ("IZONE_ID") ON DELETE CASCADE ENABLE );
zone.java
ZoneStation.java
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 @Entity @Table(name = "ZONE") @SequenceGenerator(name="ZONE_SEQ", sequenceName="ZONE_SEQ", allocationSize=1) public class Zone implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ZONE_SEQ") @Column(name = "IZONE_ID", nullable = false, unique = true) private Long id; @Column(name = "SZONE_NAME", length = 20) private String zoneName; @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "IZONE_ID") private Set<ZoneStation> stationList; //getter + setter
Et ZoneStationId.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 @Entity @Table(name = "ZONE_STATION") public class ZoneStation implements Serializable { private static final long serialVersionUID = 1L; @EmbeddedId private ZoneStationId id;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 @Embeddable public class ZoneStationId implements Serializable { private static final long serialVersionUID = 1L; @Column(name = "IZONE_ID") private Long zoneId; @Column(name = "SSTATION_CODE", length = 3) private String stationCode;
j'essaye de créer un nouvelle zone :
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 Zone insertZone = new Zone(); Set<ZoneStation> zoneStationSet = new HashSet<ZoneStation>(); //initialisae the Set ListDetailsStation = Arrays.asList(zoneDetail.getListStation()); //zoneDetail contient un nom, un code et un tableau de string contenant la liste des stations //voir plus bas if (ListDetailsStation.size() > 0){ Iterator i = ListDetailsStation.iterator(); while(i.hasNext()){ ZoneStationId detailId = new ZoneStationId(); ZoneStation zoneStation = new ZoneStation(); detailId.setStationCode(i.next().toString()); zoneStation.setId(detailId); //zoneStation.setZone(insertZone); zoneStationSet.add(zoneStation); } //end While } //end if insertZone.setZoneName(zoneDetail.getName()); //OK insertZone.setStationList(zoneStationSet); //OK zoneDAO.saveOrUpdate(insertZone); //exception NonUniqueObjectException
La console m'affiche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class ZoneDetail implements java.io.Serializable { private java.lang.String code; private java.lang.String name; public static final int NB_DETAIL_STATION = 10; public String[] listStation = null;
Merci d'avance pour votre aide
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 org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.airfrance.vtruck.entity.ZoneStation#ZoneStationId [zoneId=null, stationCode=]] at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:190) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:143) at org.hibernate.ejb.event.EJB3SaveOrUpdateEventListener.saveWithGeneratedId(EJB3SaveOrUpdateEventListener.java:62) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:252) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204) at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425) at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204) at org.hibernate.engine.Cascade.cascade(Cascade.java:161) at org.hibernate.engine.Cascade.cascade(Cascade.java:127) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:376) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:350) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:112) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:673) at com.afklm.jraf.provider.persistence.hibernate.AbstractDAOGenericImpl.saveOrUpdateNoFlush(AbstractDAOGenericImpl.java:640) ... 71 more
Partager