2010-08-31 15 views
3

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> 
+0

Êtes-vous sûr que le la table existe? Pouvez-vous nous montrer le SQL qui est exécuté? –

+0

La table n'existe pas, je veux que Hibernate la crée. –

+0

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"? –

Répondre

6

Essayez ceci:

<prop key="hibernate.hbm2ddl.auto">update</prop> 
+0

Merci beaucoup! Pourriez-vous me donner un indice sur la façon dont vous l'avez compris? Y at-il une documentation pour les différentes propriétés qui peuvent être définies? –

+0

@Farmboy Eh bien, j'ai un projet utilisant la propriété ci-dessus qui fonctionne et il a le préfixe :) En ce qui concerne les différentes propriétés, la documentation Hibernate serait le bon endroit. Voir le [Chapitre 3. Configuration] (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html). –