NullPointerException en insertion JPA (at BeanValidationEventListener.validate)
Bonjour,
j'ai une base de données HSQLDB, et lorsque j'essaye d'inséré en base voila l'exception :
Code:
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:
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:
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:
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:
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:
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.