2012-07-02 30 views
9

Tôi có dự án Maven với khung công tác Hibernate và Spring. Tôi muốn Hibernate tạo bảng tự động, nhưng tất cả các bảng hiện có chỉ bị loại bỏ và các bảng được yêu cầu không được tạo. Không có ngoại lệ được ném trong phiên nhà máy khởi, nhưng khi tôi cố gắng tiết kiệm một thực thể Player, ngoại lệ được ném:Hibernate không tạo bảng tự động

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Bảng 'billboarddb.player' không tồn tại

Nếu tôi tạo bảng theo cách thủ công và thay đổi thuộc tính hibernate.hbm2ddl.auto thành "validate", thì mọi thứ hoạt động tốt. Bạn có bất kỳ ý tưởng nào, tại sao Hibernate không tạo ra các bảng? tập tin cấu hình

mùa xuân:

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

jdbc.properties file:

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 

Hibernate phụ thuộc:

<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

Bản sao của http://stackoverflow.com/questions/4507142/does-hibernate-create-tables-in-the-database-automatically – JMelnik

+0

Có chúng giống nhau, nhưng có các bảng được tạo tốt. – Balconsky

+0

Chỉ để cung cấp cho bạn một ý tưởng. Nếu mọi thứ được cấu hình đúng Kiểm tra các thiết lập phương ngữ của bạn cho cơ sở dữ liệu của bạn –

Trả lời

25

Tôi giải quyết được sự cố. Hibernate không thể tạo bảng với MysqlInnoDBDialect. Bây giờ tôi sử dụng MySQL5InnoDBDialect thay thế.

+1

Liên kết fatalweb đó không còn hoạt động cho tôi: '( – iamanyone

+1

Tôi đã sử dụng 'MySQLDialect' trước và thay đổi nó đến 'MySQL5Dialect' (đã thêm '5'). – Froxx

4

Thêm các mục sau đây để các đạo cụ hibernateProperties.

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

Tôi đã định nghĩa nó: " $ {hibernate.hbm2ddl.auto}" – Balconsky

+0

y nó đang ném "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException"? ánh xạ là tất cả chính xác? –

+0

có, ánh xạ là ok. – Balconsky

Các vấn đề liên quan