Bonjour,
Je me suis lancé dans les cours de Serge Tahé et suis actuellement sur son Introduction à java EE.
J'ai du mettre en place 3 entités (Employé, Cotisation et Indemnité) et donc implémenter la couche JPA/Hibernate. Jusque la tout va bien j'ai pu tester la création de ma Bdd, tout fonctionne.
Le problème est apparu après l'ajout de la couche DAO. J'ai mis en place les 3 fichiers de classes de mes 3 entités ainsi que l'implémentation de leurs interfaces (CotisationDao ICotisationDao ...).
J'ai mis a jour ensuite mon fichier peristence.xml et j'ai créer le fichier de configuration de Spring qui sont les suivants :
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
<!-- provider -->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<!-- Classes persistantes -->
<property name="hibernate.archive.autodetection" value="class, hbm" />
</properties>
</persistence-unit>
</persistence>J'ai ensuite testé l'appel aux classes dao en tentant d'ajouter des entrées a ma Bdd via un programme de test. Mon programme appel une méthode de création d'une cotisation par exemple. Je reçois bien l'appel dans la méthode create de CotisationDao, je test mon EntityManager qui est bien non null mais lors de l'appel du persist l'erreur suivante apparait :spring-config-dao.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schem...-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<!-- couches applicatives -->
<bean id="employeDao" class="dao.EmployeDao" />
<bean id="indemniteDao" class="dao.IndemniteDao" />
<bean id="cotisationDao" class="dao.CotisationDao" />
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="jpa"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<!--
<property name="showSql" value="true" />
-->
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="generateDdl" value="true" />
</bean>
</property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
</bean>
<!-- la source de donnéees DBCP -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/dbpam_hibernate" />
<property name="username" value="dbpam" />
<property name="password" value="dbpam" />
</bean>
<!-- le gestionnaire de transactions -->
<tx:annotation-driven transaction-manager="txManager" />
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- traduction des exceptions -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<!-- persistence -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
</beans>
J'ai testé pas mal de choses sans succès et comme je débute dans ce domaine j'ai surement quelque chose qui m'échappe. Des erreurs que j'ai pu rencontrer sur le même type d'erreur sont :Testcase: initDB(dao.JUnitInitDB): Caused an ERROR
Unknown entity: jpa.Cotisation
java.lang.IllegalArgumentException: Unknown entity: jpa.Cotisation
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:215)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:215)
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:358)
at $Proxy8.persist(Unknown Source)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:197)
at $Proxy8.persist(Unknown Source)
at dao.CotisationDao.create(CotisationDao.java:28)
at dao.JUnitInitDB.initDB(JUnitInitDB.java:46)
Test dao.JUnitInitDB FAILED
- l'import d'un mauvais .Entity (Aucun probleme de ce coté la)
- Le fait qu'Hibernate ne reconnaissent pas mes entity : j'ai bien mes @entity et j'ai activé l'autodetection dans mon peristance.xml
- essayer de mapper ces classes directement dans le fichier de conf spring, sans succès également
J'ai aussi testé sur un projet simplifié au maximum avec une seule table pensant que cela aurait pu venir d'une mauvaise mise en place des mes relations entre table. J'ai configuré les fichiers xml de la même façon. J'ai exactement la même erreur ... . Cela me conforte sur le fait que je dois oublier qque chose sur le mapping de mes classes.
Des idées ?
Merci pour vos réponses !
Partager