2016-09-24 6 views
0

私はSpring 4.3.3を使用しています。リリース、Hibernate 5.2.2.Final、データベースはMySQLです。 strategy = GenerationType.TABLEを試したかったです。私が知っている通りGenerationType.SEQUENCE IDを生成するためにデータベースにシーケンスが必要です。スキーマ検証:欠落テーブル[hibernate_sequences]

これは私のエンティティです。

@Entity(name = CommentTable.TABLE_NAME) 
public class Comment { 

    private Integer id; 
    private String title; 
    private String message; 
    private LocalDateTime createdDateTime; 
    private Issue issue; 


    public Comment() { 
    } 

    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    @Column(name = CommentTable.COLUMN_ID, unique = true, nullable = false) 
    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 
//Other getters and setters. 
} 

春の注釈の設定

@Configuration 
@ComponentScan("com.ita.training.otm") 
@ImportResource("classpath:/config.xml") // XML with DataSource bean 
@EnableTransactionManagement 
public class AppConfiguration { 
} 

春のXML構成

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="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/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx.xsd"> 

    <bean id="emf"  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="com.ita.training.otm.core.model" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.hbm2ddl.auto">validate</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/spring_test" /> 
     <property name="username" value="user" /> 
     <property name="password" value="1111" /> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="emf" /> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <tx:annotation-driven /> 

</beans> 

私は自分のアプリケーションを実行すると、私が取得

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emf' defined in class path resource [config.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1583) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1076) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:851) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) 
at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84) 
at com.ita.training.otm.app.Main.main(Main.java:10) 
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:951) 
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:881) 
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) 
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) 
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:373) 
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:362) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1642) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1579) 
... 11 more 
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [hibernate_sequences] 
at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateTable(SchemaValidatorImpl.java:125) 
at org.hibernate.tool.schema.internal.SchemaValidatorImpl.performValidation(SchemaValidatorImpl.java:95) 
at org.hibernate.tool.schema.internal.SchemaValidatorImpl.doValidation(SchemaValidatorImpl.java:62) 
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184) 
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:65) 
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:307) 
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:490) 
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:878) 
... 17 more 
+0

使用@Table annotation..'する@表の例である(名= "TABNAME")@Entity(名= CommentTable.TABLE_NAME) パブリッククラスコメント{ ' –

+0

それが動作します** GenerationType.IDENTITY **を使用する場合。 –

+0

ああ、サム、提案ありがとう。残念ながら、私はできません。私たちには大きなプロジェクトがあり、[at] Entityから[at] Tableへの切り替えはすばやく簡単です。 http://stackoverflow.com/questions/18732646/name-attribute-inentent-and-table –

答えて

3

例外が発生しているので、あなたの避難所」マティオ定義さ..Below @GeneratedValuegenerator

@GeneratedValue(strategy=GenerationType.TABLE, generator="course") 
     @TableGenerator(
       name="course", 
       table="GENERATOR_TABLE", 
       pkColumnName = "key", 
       valueColumnName = "next", 
       pkColumnValue="course", 
       allocationSize=30 
      ) 
    private int id;