【问题标题】:Sequence "HIBERNATE_SEQUENCE" not found; SQL statement未找到序列“HIBERNATE_SEQUENCE”; SQL 语句
【发布时间】:2017-02-09 23:22:51
【问题描述】:

在我的 spring mvc 应用程序中,我有以下对象。我正在尝试在我的应用程序中使用 devtool 来可视化数据。

@Entity
@Data
public class ConsultationRequest {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    private String email;

    private String purpose;

    private String programme;

    private int year;

    private String language;

    private String comments;
    @Enumerated(EnumType.STRING)
    private ConsultationStatus status;
}

然后我用jpa制作实体:

@Repository
public interface ConsultationRequestRepository extends JpaRepository<ConsultationRequest, Long> {

}

问题是当我加载我的应用程序时,我遇到了 2 个错误:

 Unsuccessful: drop sequence hibernate_sequence
[36morg.hibernate.tool.hbm2ddl.SchemaExport  Sequence "HIBERNATE_SEQUENCE" not found; SQL statement:

然后当我打开

http://localhost:8080/h2-console/

我看不到桌子。 似乎在引导过程中,表没有制作。

【问题讨论】:

    标签: spring hibernate jpa hbm2ddl


    【解决方案1】:

    启动应用程序spring-boot时出现SQL操作错误。

    我在spring属性中添加了设置并解决了:在spring:jpa.hibernate.ddl-auto=create-drop to hibernate中可以自动创建或删除表。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    对于Mysql:

    不添加自增,修改你的表:

    ALTER TABLE table_name MODIFY COLUMN id BIGINT AUTO_INCREMENT=1

    【讨论】:

      【解决方案3】:

      如果有人在 Spring Boot testing(with H2) 中遇到此错误,我们必须在 application.properties(或我们正在使用的任何配置文件)中使用以下内容:

      spring.jpa.hibernate.ddl-auto=create-drop
      

      【讨论】:

      • 我实际使用的属性是:spring.jpa.hibernate.ddl-auto=update。这不会覆盖数据,以防它们使用 data.sql 中的非生成键插入
      • create-drop 用于 POST 数据,但不适用于在 H2 数据库启动期间从 data.sql 加载。 update 值相反(适用于 data.sql 但不适用于 POST 数据),none 值与 update 相同
      • 效果很好,谢谢!
      【解决方案4】:

      在属性文件中设置以下属性帮助我解决了 hibernate 5.4v 的 hibernate_sequence 问题

      spring:
        jpa:
          hibernate:
            use-new-id-generator-mappings: false
      

      【讨论】:

      • 我已经为此浪费了半天时间,并且尝试了所有方法。没有任何效果,直到我找到了这个解决方案。在测试我的数据库代码时,我使用 Liquibase 创建数据库模式,并用一些数据填充它。在我的测试中,我总是遇到这个错误:Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HIBERNATE_SEQUENCE" not found; SQL statement 这是修复:spring.jpa.hibernate.use-new-id-generator-mappings=false
      【解决方案5】:

      如果您使用带有liquidbase 的第二个缓存,则必须在更改日志中添加序列,如下所示:

      <changeSet author="liquibase-docs"
          id="createSequence-example">
          <createSequence catalogName="cat" cycle="false"
              incrementBy="1" ordered="true" schemaName="public"
              sequenceName="hibernate_sequence" startValue="0" />
      </changeSet>
      

      【讨论】:

        【解决方案6】:

        查看persistence.xml

        property name="hibernate.hbm2ddl.auto" value="create"
        

        不是hdm2ddl

        这在我的情况下有效。

        【讨论】:

          【解决方案7】:

          更新您的代码如下:

           @Id
           @GeneratedValue(strategy = GenerationType.IDENTITY)
           private Long id;
          

          由于您没有指定序列表名,hibernate 将查找名为hibernate_sequence 的序列表并将其用作默认

          对于 Oracle/Postgres,使用的增量字段是序列表。
          在 MySql 中,存在自动递增的递增字段。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-27
            • 2019-01-11
            • 1970-01-01
            • 2019-08-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多