salut tous le monde, je suis nouveau avec hibernate, jai une table qui a une clé composé,j utilise myeclipse.
voici le script de la table généré avec oracle:
j ai mappé cette table et jai le fichier de mapping suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE "ISIFINUSER"."PHASE_ETAPE" ("ID_PROJ" NUMBER(2) NOT NULL, "ID_ETAPE" NUMBER(2) NOT NULL, "DATE" VARCHAR2(25 byte) NOT NULL, "DATE_DEB_ETAPE" VARCHAR2(25 byte) NOT NULL, "DATE_FIN_ETAPE" VARCHAR2(25 byte) NOT NULL, "COMMENT_ETAPE" VARCHAR2(1000 byte) NOT NULL, CONSTRAINT "PHASE_ETAPE_PK" PRIMARY KEY("ID_PROJ", "ID_ETAPE", "DATE")
il ya deux class java resultantes: la classe de l identifiant et la class PhaseTache
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 <hibernate-mapping> <class name="com.isifin.hiber.PhaseEtape" table="PHASE_ETAPE" schema="ISIFINUSER"> <composite-id name="id" class="com.isifin.hiber.PhaseEtapeId"> <key-property name="idProj" type="java.lang.Long"> <column name="ID_PROJ" precision="2" scale="0" /> </key-property> <key-property name="idEtape" type="java.lang.Long"> <column name="ID_ETAPE" precision="2" scale="0" /> </key-property> <key-property name="date" type="java.lang.String"> <column name="DATE" length="25" /> </key-property> </composite-id> <property name="dateDebEtape" type="java.lang.String"> <column name="DATE_DEB_ETAPE" length="25" /> </property> <property name="dateFinEtape" type="java.lang.String"> <column name="DATE_FIN_ETAPE" length="25" /> </property> <property name="commentEtape" type="java.lang.String"> <column name="COMMENT_ETAPE" length="1000" /> </property> </class> </hibernate-mapping>
voici le code des deux class:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 ublic class PhaseEtapeId implements java.io.Serializable { // Fields private Long idProj; private Long idEtape; private String date; // Constructors /** default constructor */ public PhaseEtapeId() { } /** full constructor */ public PhaseEtapeId(Long idProj, Long idEtape, String date) { this.idProj = idProj; this.idEtape = idEtape; this.date = date; } // Property accessors public Long getIdProj() { return this.idProj; } public void setIdProj(Long idProj) { this.idProj = idProj; } public Long getIdEtape() { return this.idEtape; } public void setIdEtape(Long idEtape) { this.idEtape = idEtape; } public String getDate() { return this.date; } public void setDate(String date) { this.date = date; } public boolean equals(Object other) { if ((this == other)) return true; if ((other == null)) return false; if (!(other instanceof PhaseEtapeId)) return false; PhaseEtapeId castOther = (PhaseEtapeId) other; return ((this.getIdProj() == castOther.getIdProj()) || (this .getIdProj() != null && castOther.getIdProj() != null && this.getIdProj().equals( castOther.getIdProj()))) && ((this.getIdEtape() == castOther.getIdEtape()) || (this .getIdEtape() != null && castOther.getIdEtape() != null && this.getIdEtape() .equals(castOther.getIdEtape()))) && ((this.getDate() == castOther.getDate()) || (this.getDate() != null && castOther.getDate() != null && this.getDate() .equals(castOther.getDate()))); } public int hashCode() { int result = 17; result = 37 * result + (getIdProj() == null ? 0 : this.getIdProj().hashCode()); result = 37 * result + (getIdEtape() == null ? 0 : this.getIdEtape().hashCode()); result = 37 * result + (getDate() == null ? 0 : this.getDate().hashCode()); return result; } }
MyEclipse génére aussi des class utilitaire PhaseTacheDAO qui posséde une methode save();
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 public class PhaseEtape implements java.io.Serializable { // Fields private PhaseEtapeId id; private String dateDebEtape; private String dateFinEtape; private String commentEtape; // Constructors /** default constructor */ public PhaseEtape() { } /** full constructor */ public PhaseEtape(PhaseEtapeId id, String dateDebEtape, String dateFinEtape, String commentEtape) { this.id = id; this.dateDebEtape = dateDebEtape; this.dateFinEtape = dateFinEtape; this.commentEtape = commentEtape; } // Property accessors public PhaseEtapeId getId() { return this.id; } public void setId(PhaseEtapeId id) { this.id = id; } public String getDateDebEtape() { return this.dateDebEtape; } public void setDateDebEtape(String dateDebEtape) { this.dateDebEtape = dateDebEtape; } public String getDateFinEtape() { return this.dateFinEtape; } public void setDateFinEtape(String dateFinEtape) { this.dateFinEtape = dateFinEtape; } public String getCommentEtape() { return this.commentEtape; } public void setCommentEtape(String commentEtape) { this.commentEtape = commentEtape; } }
le probléme est que quand jessay de sauvegarder un nouvel objet avec le code suivant:
j ai l erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 PhaseEtapeId phaseEtapeId=new PhaseEtapeId(Long.getLong("1"),Long.getLong(afficherFormulaireForm.getId_etape()),stDate); PhaseEtape phaseEtape=new PhaseEtape(phaseEtapeId,afficherFormulaireForm.getDate_deb_etape(),afficherFormulaireForm.getDate_fin_etape(),afficherFormulaireForm.getComment()); PhaseEtapeDAO phaseEtapeDAO=new PhaseEtapeDAO(); Transaction tx=phaseEtapeDAO.getSession().beginTransaction(); phaseEtapeDAO.save(phaseEtape); tx.commit(); phaseEtapeDAO.getSession().close();
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 exception javax.servlet.ServletException: Could not execute JDBC batch update org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) cause mère org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67) org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:202) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139) org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297) org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985) org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333) org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) com.isifin.struts.action.SauverAction.execute(SauverAction.java:57) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
si quelqu un peut m aider je lui serai tres reconnaissant,
merci davance
Partager