J'essaie d'utiliser Spring DAO avec Hibernate pour une application web. Lorsque je tente de conserver les informations dans le DAO en utilisantHibernate ne pas créer de table lors de l'utilisation Spring DAO
getHibernateTemplate().save("bar", bar);
Je reçois le texte suivant dans Tomcat:
org.springframework.dao.InvalidDataAccessResourceUsageException: could not insert:
[com.enw.foo.domain.Bar]; nested exception is org.hibernate.exception.SQLGrammarException: could not insert: [com.enw.foo.domain.Bar]
Les fichiers journaux rapportent:
SEVERE: Servlet.service() for servlet foo threw exception
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'foo.bar' doesn't exist
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39
Ce qui est sans surprise, je me attends que la table n'existe pas. La base de données existe et je compte sur Hibernate pour générer et modifier les tables si nécessaire.
Le fichier hibernate-mapping contient:
<class name="Bar" table="BAR">
<id name="id" column="BAR_ID">
<generator class="native"/>
</id>
<property name="title" column="TITLE"/>
<property name="date" type="timestamp" column="POST_DATE"/>
</class>
Et la configuration du ressort se produit principalement dans foo-data.xml
qui contient:
<bean id="barDao" class="com.enw.foo.data.impl.HibernatePostDao">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>Domain.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="show_sql">true</prop>
<prop key="hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/foo"/>
<property name="username" value="root"/>
<property name="password" value=""/>
<property name="initialSize" value="5"/>
<property name="maxActive" value="10"/>
</bean>
Êtes-vous sûr que le la table existe? Pouvez-vous nous montrer le SQL qui est exécuté? –
La table n'existe pas, je veux que Hibernate la crée. –
Le problème est-il spécifique à l'entité "Bar"? Est-ce que d'autres tables sont créées? Si oui, quel est le vrai nom de la table "BAR"? –