Bonjour,

j'ai une base de données HSQLDB, et lorsque j'essaye d'inséré en base voila l'exception :
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
 
java.lang.NullPointerException
	at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:131)
	at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:94)
	at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:160)
	at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:65)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
	at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:69)
	at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:179)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
	at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808)
	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782)
	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:837)
	at fr.greg.maCompta.server.dao.UtilisateurDao.add(UtilisateurDao.java:54)
	at fr.greg.maCompta.server.service.InscriptionServiceImpl.inscription(InscriptionServiceImpl.java:27)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
	at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:324)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
Voici le code de ma DAO :
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
 
EntityManager em = createEntityManager();
EntityTransaction tx = em.getTransaction();
			try {
				tx.begin();
				Utilisateur user = new Utilisateur();
				user.setNom("test");
				em.persist(user);
				tx.commit();
				utilisateurId = utilisateur.getId();
			} catch (Throwable t) {
				t.printStackTrace();
				tx.rollback();
			} finally {
				em.close();
			}
Voici le code de ma classe gérant mon EntityManager :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("macompta-unit");
 
	public EntityManager createEntityManager() {
		return emf.createEntityManager();
	}
 
	public static void closeEntityManager() {
		emf.close();
	}
Le code de mon Objet que je souhaite persister :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
@Entity
@Table(name = "utilisateur")
public class Utilisateur implements Serializable {
	private static final long serialVersionUID = 6435484481277312961L;
 
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
 
	@Column
	private String nom;
Le code de mon persistence.xml :
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
 
<persistence-unit name="macompta-unit" transaction-type="RESOURCE_LOCAL">
	<provider>org.hibernate.ejb.HibernatePersistence</provider>
 
    <class>fr.greg.maCompta.server.modele.Utilisateur</class>
 
    <exclude-unlisted-classes/>
 
    <properties>
	  <!-- Database connection settings -->
	  <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" />
	  <!-- <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:serendipitydb" />
      <property name="hibernate.connection.url" value="jdbc:hsqldb:file:/db/serendipitydb" /> 
 
      <property name="hibernate.connection.url" value="jdbc:hsqldb:file:/db/serendipitydb" />-->
      <property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://localhost/db" />
	  <property name="hibernate.connection.username" value="sa" />
	  <property name="hibernate.connection.password" value="" />
 
      <!-- JDBC connection pool (use the built-in) -->
	  <property name="connection.pool_size" value="1" />
 
	  <!-- SQL dialect -->
	  <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
 
      <!-- Enable Hibernate's automatic session context management -->
	  <property name="current_session_context_class" value="thread" />
 
	  <!-- Disable the second-level cache  -->
	  <property name="cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
 
	  <!-- Echo all executed SQL to stdout -->
	  <property name="hibernate.show_sql" value="true" /> 
	  <property name="hibernate.format_sql" value="true" /> 
 
	  <!-- Drop and re-create the database schema on startup -->
	  <!-- This property should not be set in PRODUCTION environments -->
	  <property name="hibernate.hbm2ddl.auto" value="create" />
 
	  <property name="hibernate.c3p0.min_size" value="5" />
	  <property name="hibernate.c3p0.max_size" value="20" />
	  <property name="hibernate.c3p0.timeout" value="300" />
	  <property name="hibernate.c3p0.max_statements" value="50" />
	  <property name="hibernate.c3p0.idle_test_period" value="3000" />
    </properties>
 
  </persistence-unit>
Je n'ai plus d'idée pour résoudre ce problème.

Le select suivant se passe sans encombre :
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
 
public Utilisateur getUtilisateurFromLogin(String login) {
		EntityManager em = createEntityManager();
		Utilisateur utilisateur = null;
		try {
			TypedQuery<Utilisateur> query = em.createQuery("FROM Utilisateur WHERE nom = ?1 ", Utilisateur.class);
			query.setParameter(1, login);
			List<Utilisateur> utilisateurs = query.getResultList();
			utilisateur = utilisateurs.isEmpty() ? null : utilisateurs.get(0);
		} finally {
			em.close();
		}
 
		return utilisateur;
	}

Merci d'avance pour votre aide précieuse. Si vous avez besoin de davantage de précisions n'hésitez pas.