2012-07-02 4 views
9

J'ai un projet Maven avec Hibernate et Spring framework. Je veux que Hibernate crée des tables automatiquement, mais toutes les tables existantes sont simplement supprimées et les tables requises ne sont pas créées. Aucune exception ne sont jetés lors de l'initialisation de l'usine de session, mais lorsque je tente sauver une entité Player, exception est levée:Hibernate ne crée pas de tables automatiquement

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table « billboarddb.player » ne existe

Si je crée les tables et modifier manuellement la propriété hibernate.hbm2ddl.auto-"validate", alors tout fonctionne très bien. Avez-vous une idée, pourquoi Hibernate ne crée pas les tables?

fichier de configuration Spring:

<context:component-scan base-package="org.meluk.billboard.business.controller" /> 
<tx:annotation-driven transaction-manager="txManager" /> 
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations" > 
     <list> 
      <value>/WEB-INF/config/jdbc.properties</value> 
     </list> 
    </property> 
</bean> 
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${hibernate.connection.driver_class}" /> 
    <property name="url" value="${hibernate.connection.url}" /> 
    <property name="username" value="${hibernate.connection.username}" /> 
    <property name="password" value="${hibernate.connection.password}" /> 
</bean> 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" > 
    <property name="dataSource" ref="dataSource" /> 
    <property name="configLocation" value="/WEB-INF/hibernate.cfg.xml" /> 
    <property name="packagesToScan" value="org.meluk.billboard.jpa" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
      <prop key="hibernate.c3p0.min_size">${hibernate.c3p0.min_size}</prop> 
      <prop key="hibernate.c3p0.max_size">${hibernate.c3p0.max_size}</prop> 
      <prop key="hibernate.c3p0.timeout">${hibernate.c3p0.timeout}</prop> 
      <prop key="hibernate.c3p0.max_statements">${hibernate.c3p0.max_statements}</prop> 
     </props> 
    </property> 
</bean> 

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

fichier jdbc.properties:

hibernate.connection.driver_class=com.mysql.jdbc.Driver 
hibernate.connection.url=jdbc:mysql://127.0.0.1:3306/BillboardDB 
hibernate.connection.username=root 
hibernate.connection.password=1234 
hibernate.default_schema=BillboardDB 
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect 
hibernate.hbm2ddl.auto=create 
hibernate.show_sql=true 
hibernate.c3p0.min_size=5 
hibernate.c3p0.max_size=20 
hibernate.c3p0.timeout=1800 
hibernate.c3p0.max_statements=50 

dépendances Hibernate:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>${hibernateVersion}</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-c3p0</artifactId> 
    <version>${hibernateVersion}</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-tools</artifactId> 
    <version>${hibernateToolsVersion}</version> 
</dependency> 
+0

Duplication de http://stackoverflow.com/questions/4507142/does-hibernate-create-tables-in-the-database-automatically – JMelnik

+0

Oui, ils sont similaires, mais les tables sont générées correctement. – Balconsky

+0

Juste pour vous donner une idée. Si tout est correctement configuré Vérifiez vos paramètres de dialecte pour votre base de données –

Répondre

25

Je résous le problème. Hibernate n'a pas pu créer de tables avec MysqlInnoDBDialect. Maintenant, j'utilise MySQL5InnoDBDialect à la place.

+1

Ce lien fatalweb ne fonctionne plus pour moi: '( – iamanyone

+1

J'ai utilisé 'MySQLDialect' avant et l'ai changé à 'MySQL5Dialect' (ajouté le '5'). A fait le travail, aussi. – Froxx

4

Ajoutez l'entrée suivante aux accessoires de hibernateProperties.

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

Je l'ai défini: " $ {hibernate.hbm2ddl.auto}" – Balconsky

+0

y il lance "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException"? les mappings sont-ils tous corrects? –

+0

oui, la cartographie est ok. – Balconsky

Questions connexes