Bonjour,
je développe une application J2ee et j'utilise Hibernate 3.6
J'ai un souci pour l'ajout d'un joueur à la base de données.
voici le sql de ma table :
(remplie ensuite par un script sql)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE TABLE IF NOT EXISTS `joueurs` ( `id` int(11) NOT NULL, `nom` varchar(100) NOT NULL, `prenom` varchar(100) NOT NULL, `age` int(3) NOT NULL, `taille` int(3) NOT NULL, `poids` int(3) NOT NULL, `poste` varchar(100) NOT NULL, `club` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `club` (`club`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
voici ma fonction ajouterJoueur dans le dao pour l'ajout d'un joueur à la base :
et ensuite ma classe joueur (qui possède une relation many-to-one sur la classe club) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public void AjouterJoueur(Joueur monJoueur) { // Récupération d'une session Hibernate Session s = HibernateSessionFactory.getSession(); // Début de la transaction Transaction t = s.beginTransaction(); s.save(monJoueur); t.commit(); s.close(); }
Et enfin l'exception problématique :
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 @Entity @Table(name = "joueurs") public class Joueur implements Serializable { /** * serialVersionUID */ private static final long serialVersionUID = 3148568044929607587L; /** * int id */ @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "id") private int id; /** * String nom */ @Column(name = "nom") private String nom; /** * String prenom */ @Column(name = "prenom") private String prenom; /** * int age */ @Column(name = "age") private int age; /** * String poste */ @Column(name = "poste") private String poste; /** * int poids */ @Column(name = "poids") private int poids; /** * int taille */ @Column(name = "taille") private int taille; /** * String club */ @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, targetEntity = Club.class) @JoinColumn(name = "club") private Club club; [...]
J'ai recherché une solution sur internet et notamment sur ces forums mais à chaque solution proposée, je n'arrive toujours pas a le faire marcher.
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 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '0' for key 'PRIMARY' sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) java.lang.reflect.Constructor.newInstance(Unknown Source) com.mysql.jdbc.Util.handleNewInstance(Util.java:411) com.mysql.jdbc.Util.getInstance(Util.java:386) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427) com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1980) com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1451) org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184) org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51) org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216) org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383) org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133) org.esaip.composition.dao.JoueurDao.AjouterJoueur(JoueurDao.java:108) org.esaip.composition.metier.JoueurMetier.AjouterJoueur(JoueurMetier.java:69) org.esaip.composition.struts.AjoutJoueur.execute(AjoutJoueur.java:80) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)
Je comprends bien que vu que je ne spécifie pas d'id, il essaye de l'insérer à 0 mais l'entrée 0 existe déja dans la base...
Faut-il que je récupère l'id max déja créé et que je l'incrémente avant d'ajouter un joueur a la base ou hibernate est-il capable de faire automatiquement l'incrémentation sans que je m'en occupe ?
un peu d'aide serait pas de refus
Partager