Bonjour,
J'ai mappé deux tables reliées par une relation N-N
J'ai utilisé le générateur de code netbeans pour mapper mes tables sous Oracle.
Ce qui me donne ....
Après "pompage netbeans ..
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 CREATE TABLE GEODE_DISCIPLINE ( ID NUMBER NOT NULL ENABLE, NAME VARCHAR2(255), DESCRIPTION VARCHAR2(255), CREATED_AT DATE, UPDATED_AT DATE, CLOSING_DATE DATE default NULL, CONSTRAINT pk_geode_discipline PRIMARY KEY (ID), CONSTRAINT discipline_updated_date check (CREATED_AT <= UPDATED_AT) ); CREATE TABLE GEODE_TABCOMDOM( ID NUMBER PRIMARY KEY, NOM VARCHAR2(255) NOT NULL, DESCRIPTION VARCHAR2(255) NULL, CREATED_AT DATE NOT NULL, UPDATED_AT DATE NULL, CLOSINGDATE DATE NULL ); CREATE TABLE GEODE_TABCOMDOM_DISCIPLINE( DISCIPLINE_ID integer NOT NULL, CONSTRAINT FK_GTD_DISCIPLINE FOREIGN KEY (DISCIPLINE_ID) REFERENCES GEODE_DISCIPLINE(ID) on delete set null, TABCOMDOM_ID INTEGER NOT NULL, CONSTRAINT FK_GTD_TABCOMDOM FOREIGN KEY (TABCOMDOM_ID) REFERENCES GEODE_TABCOMDOM(ID) on delete set null );
et
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 @Entity @Table(name = "GEODE_TABCOMDOM") @SequenceGenerator(name="TABCOMDOMSEQ",sequenceName="SEQ_ID_TABCOMDOM",allocationSize=1) @NamedQueries({@NamedQuery(name = "GeodeTabcomdom.findById", query = "SELECT g FROM GeodeTabcomdom g WHERE g.id = :id"), @NamedQuery(name = "GeodeTabcomdom.findByNom", query = "SELECT g FROM GeodeTabcomdom g WHERE g.nom = :nom"), @NamedQuery(name = "GeodeTabcomdom.findByDescription", query = "SELECT g FROM GeodeTabcomdom g WHERE g.description = :description"), @NamedQuery(name = "GeodeTabcomdom.findByCreatedAt", query = "SELECT g FROM GeodeTabcomdom g WHERE g.createdAt = :createdAt"), @NamedQuery(name = "GeodeTabcomdom.findByUpdatedAt", query = "SELECT g FROM GeodeTabcomdom g WHERE g.updatedAt = :updatedAt")}) public class GeodeTabcomdom implements Serializable { private static final long serialVersionUID = 1L; @GeneratedValue(strategy=GenerationType.SEQUENCE,generator = "TABCOMDOMSEQ") @Id @Column(name = "ID", nullable = false) private BigDecimal id; @Column(name = "NOM", nullable = false) private String nom; @Column(name = "DESCRIPTION") private String description; @Column(name = "CREATED_AT", nullable = false) @Temporal(TemporalType.DATE) private Date createdAt; @Column(name = "UPDATED_AT") @Temporal(TemporalType.DATE) private Date updatedAt; @Column(name="CLOSINGDATE") @Temporal(TemporalType.DATE) private Date closingdate; @ManyToMany(mappedBy = "tabcomdomIdCollection",cascade={CascadeType.ALL}) @JoinTable(name = "GEODE_TABCOMDOM_DISCIPLINE", joinColumns = {@JoinColumn(name = "DISCIPLINE_ID", referencedColumnName = "ID")}, inverseJoinColumns = {@JoinColumn(name = "TABCOMDOM_ID", referencedColumnName = "ID")}) private Collection<GeodeDiscipline> disciplineIdCollection;
Enfin je fais une classe Service
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 @Entity @Table(name = "GEODE_DISCIPLINE") @NamedQueries({ @NamedQuery(name = GeodeDiscipline.QN_D.FINDBYID, query = "SELECT g FROM GeodeDiscipline g WHERE g.id = :id"), @NamedQuery(name = GeodeDiscipline.QN_D.FINDBYNAME, query = "SELECT g FROM GeodeDiscipline g WHERE g.name = :name"), @NamedQuery(name = GeodeDiscipline.QN_D.FINDBYDESC, query = "SELECT g FROM GeodeDiscipline g WHERE g.description = :description"), @NamedQuery(name = GeodeDiscipline.QN_D.FINDBYCREATEDAT, query = "SELECT g FROM GeodeDiscipline g WHERE g.createdAt = :createdAt"), @NamedQuery(name = GeodeDiscipline.QN_D.FINDBYUPDATEDAT, query = "SELECT g FROM GeodeDiscipline g WHERE g.updatedAt = :updatedAt"), @NamedQuery(name = GeodeDiscipline.QN_D.FINDBYCLOSINGDATE, query = "SELECT g FROM GeodeDiscipline g WHERE g.closingDate = :closingDate"), @NamedQuery(name = GeodeDiscipline.QN_D.FINDALL, query = "SELECT g FROM GeodeDiscipline g ORDER BY g.id") }) @SequenceGenerator(name="DISCIPLINESEQ",sequenceName="SEQ_ID_GEODE_DISCIPLINE",allocationSize=1) public class GeodeDiscipline implements Serializable { private static final long serialVersionUID = 123444956L; @Id @Column(name = "ID", nullable = false) @GeneratedValue(strategy=GenerationType.SEQUENCE,generator = "DISCIPLINESEQ") private Long id; @Column(name = "NAME") private String name; @Column(name = "DESCRIPTION") private String description; @Column(name = "CREATED_AT") @Temporal(TemporalType.DATE) private Date createdAt; @Column(name = "UPDATED_AT") @Temporal(TemporalType.DATE) private Date updatedAt; @Column(name = "CLOSING_DATE") @Temporal(TemporalType.DATE) private Date closingDate; @OneToMany(cascade = CascadeType.ALL, mappedBy = "disciplineId") private Collection<GeodeUser> geodeUserCollection; @OneToMany(cascade=CascadeType.ALL, mappedBy="disciplineId") private Collection<book.geode.documents.Exercices> exercicesCollection; @OneToMany(cascade = CascadeType.ALL, mappedBy = "disciplineId") private Collection<Cahier> geodeCahierCollection; @OneToMany(mappedBy = "disciplineId") private Collection<Blocs> geodeBlocCollection; private Collection<book.geode.documents.GeodeTabcomdom> tabcomdomIdCollection;
pour l'insertion des données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public GeodeTabcomdom CreateCompetence(GeodeTabcomdom competence){ GeodeTabcomdom geodetabcomdom = null; if(competence != null){ geodetabcomdom = new GeodeTabcomdom(); geodetabcomdom = competence; for(GeodeDiscipline discipline : competence.getDisciplineIdCollection()){ discipline = em.find(GeodeDiscipline.class, discipline.getId()); } em.persist(geodetabcomdom); } return geodetabcomdom; }
et une classe de test histoire de
Et la surprise tous les tests passent sauf que dans m'a table intermédiaire j'ai pas la relation entre discipline et TabComDom, il fait l'insertion dans la deuxième table Ok, il trouve la discipline existante mais j'ai pas insert into Latable intermèdiaire des valeurs de la relation ???
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 public void testCreateCompetence() { System.out.println("CreateCompetence"); GeodeTabcomdom competence = new GeodeTabcomdom(); GeodeDiscipline discipline = new GeodeDiscipline(); CompetenceService instance = new CompetenceService(em); discipline = null; EntityTransaction tx = em.getTransaction(); tx.begin(); competence.setNom("Mathématique Evaluation"); competence.setDescription("Description Evaluation math"); competence.setCreatedAt(this.getDatedujour()); competence.setUpdatedAt(this.getDatedujour()); Collection<GeodeDiscipline> disciplines = new ArrayList<GeodeDiscipline>(); competence.setDisciplineIdCollection(disciplines); competence.getDisciplineIdCollection().add(em.find(GeodeDiscipline.class,new Long(1))); GeodeTabcomdom result = instance.CreateCompetence(competence); tx.commit(); System.out.println("Id : "+ result.getId()); assertEquals(competence, result); }
J'utilise Toplink, je dois mal m'y prendre ???
traçage toplink, il n'y a pas la requête insert into TABCOMDOM_DISCIPLINE values (?,?) bref ???
olivier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 [TopLink Info]: 2008.09.26 02:11:13.953--ServerSession(6182315)--Thread(Thread[main,5,main])--file:/C:/Documents%20and%20Settings/men/Mes%20documents/NetBeansProjects/PROJETGEODE/GEODE/GEODEBOOK/build/jar/-test login successful CreateCompetence [TopLink Fine]: 2008.09.26 02:11:14.000--ServerSession(6182315)--Connection(11608737)--Thread(Thread[main,5,main])--SELECT ID, CLOSING_DATE, CREATED_AT, UPDATED_AT, DESCRIPTION, NAME FROM GEODE_DISCIPLINE WHERE (ID = ?) bind => [1] [TopLink Fine]: 2008.09.26 02:11:14.156--ServerSession(6182315)--Connection(20000831)--Thread(Thread[main,5,main])--SELECT SEQ_ID_TABCOMDOM.NEXTVAL FROM DUAL [TopLink Fine]: 2008.09.26 02:11:14.171--ClientSession(5313146)--Connection(16988783)--Thread(Thread[main,5,main])--INSERT INTO GEODE_TABCOMDOM (ID, UPDATED_AT, CLOSINGDATE, DESCRIPTION, NOM, CREATED_AT) VALUES (?, ?, ?, ?, ?, ?) bind => [31, 2008-09-26, null, Description Evaluation math, Mathématique Evaluation, 2008-09-26] Id : 31
Partager