Bonjour,
j'ai une base de données HSQLDB, et lorsque j'essaye d'inséré en base voila l'exception :
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
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 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
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(); }
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 private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("macompta-unit"); public EntityManager createEntityManager() { return emf.createEntityManager(); } public static void closeEntityManager() { emf.close(); }
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 @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;
Je n'ai plus d'idée pour résoudre ce problème.
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>
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.
Partager