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 :
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;
(remplie ensuite par un script sql)


voici ma fonction ajouterJoueur dans le dao pour l'ajout d'un joueur à la base :

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 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
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;
 
[...]
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
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)
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.

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