首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模式-验证:缺少表[hibernate_sequences]

模式-验证:缺少表[hibernate_sequences]
EN

Stack Overflow用户
提问于 2016-09-24 11:17:00
回答 3查看 38.6K关注 0票数 4

我使用Spring4.3.3.RELEASE,Hibernate 5.2.2。最后,数据库是MySQL。我想试试策略= GenerationType.TABLE。如我所知,对于GenerationType.SEQUENCE,我需要数据库中的序列来生成ids。

这是我的实体。

代码语言:javascript
复制
@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.
}

弹簧注释配置

代码语言:javascript
复制
@Configuration
@ComponentScan("com.ita.training.otm") 
@ImportResource("classpath:/config.xml") // XML with DataSource bean
@EnableTransactionManagement
public class AppConfiguration {
}

Spring配置

代码语言:javascript
复制
<?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>

当我运行我的申请,我得到

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-24 11:36:00

出现此异常是因为您还没有在@GeneratedValue..Below中提到过

代码语言:javascript
复制
    @GeneratedValue(strategy=GenerationType.TABLE, generator="course")
        @TableGenerator(
                name="course",
                table="GENERATOR_TABLE",
                pkColumnName = "key",
                valueColumnName = "next",
                pkColumnValue="course",
                allocationSize=30
            )
    private int id;
票数 8
EN

Stack Overflow用户

发布于 2022-02-28 13:18:59

我用这个财产解决了它

代码语言:javascript
复制
spring:
  jpa:
    hibernate:
      use-new-id-generator-mappings: false

我用的是弹簧引导V2.5.9

使用此设置,如果缺少hibernate序列,则生成hibernate序列。然后,也不需要@GeneratedValue注释。

票数 1
EN

Stack Overflow用户

发布于 2022-01-21 09:46:01

在开始执行实际任务之前,我必须将该项目保持在可运行模式下,我已经解决了此异常,并通过以下步骤启动了我的应用程序:

  1. 在本地MYSQL服务器中创建了一个新的数据库架构。并将其添加到属性文件。
  2. 将hibernate方言改为org.hibernate.dialect.MySQL5Dialect
  3. 将Spring.jpa.Hibernate.ddl-自动从“验证”更改为“创建-下降”选项
  4. 重新启动应用程序。

我理解的实际问题是,现有的数据库模式具有与当前代码不同步的表、约束和数据。

我的目标是让我的应用程序开始,这些步骤帮助了我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39675714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档