当前位置: 首页 > 知识库问答 >
问题:

在JPA中使用Flyway创建的序列

沈华晖
2023-03-14

我正在使用Spring靴2 /飞行路线/后退设置。

我想让Flyway创建一个表,其中包含自动键迭代的序列。JPA应该识别序列并使用它。

我让Flyway执行PostgreSQL脚本:

CREATE SEQUENCE config_id_seq;

CREATE TABLE config
(
    ID          BIGINT NOT NULL PRIMARY KEY DEFAULT nextval('config_id_seq'),
    DESCRIPTION VARCHAR(500)
);

这是实体定义:

@Entity
@Table(name = "config")
public class Config {

    @Id
    @SequenceGenerator(name = "config_id_sequence", sequenceName = "config_id_seq")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "config_id_sequence")
    @Column(name = "id")
    private long id;

    @Column(name = "description")
    private String description;

启动时抛出以下错误:

Caused by: org.postgresql.util.PSQLException: ERROR: relation "config_id_seq" already exists
Caused by: org.postgresql.util.PSQLException: ERROR: cannot change sequence "config_id_seq"

我的解释是Flyway成功执行了脚本并创建了一个序列。但是JPA想在之后创建序列并失败,因为它已经存在。如果我错了,请纠正我。

现在,如果可能的话,我如何配置JPA以重用现有序列?

共有1个答案

公孙宏畅
2023-03-14

我们需要将“无”属性设置为“无”,或者您可以跳过此属性,以便 Spring 不会自行创建数据库对象。

如果我们使用飞行路线,那么我们应该将数据库对象创建的责任交给仅飞行路线,即仅使用flyway脚本(如表和序列)创建所有数据库对象。

指定GeneratedValue意味着JPA使用序列,检索下一个值本身,然后在INSERT中使用它。

但是要确保你有和你在实体类和flyway脚本中提到的相同的配置

 类似资料:
  • 我正在使用flyway数据库迁移工具和一个spring boot jpa项目。当我第一次运行服务器时,flyway希望迁移SQL,但表还没有创建。在这种情况下,flyway返回一个错误,该错误类似 spring.flyway.baseline-on-migrate=true spring.flyway.enabled=true spring.flyway.clean-on-validation-e

  • 我想将这个Spring属性文件用于数据库配置。 代码运行良好,但不幸的是,当删除所有表后数据库为空时,我会收到SQL错误,因为首先执行迁移脚本。 如何先配置 JPA 以创建表,然后再执行迁移脚本?

  • 问题内容: 问题: 是否可以在迁移脚本中创建一个新的数据库,然后连接到它?怎么样? 我的场景: 我正在尝试在Java项目(使用Jersey2.4 + tomcat 7 + PostgreSQL 9.3.1 + EclipseLink的RESTful应用程序)中使用flyway来管理使用git的不同开发人员之间的更改。我写了自己的初始化脚本,并运行了: 而且效果很好。问题是我无法使用脚本创建新的数据

  • 我一直在尝试使用springboot和flyway创建一个web应用程序。构建工具是Gradle。然而,当我尝试运行程序时,Flyway只创建了一个名为Flyway_schema_hystory的表,但不从SQL脚本创建表。脚本<code>V1__Create_all_tables。sql位于正确的包中。<code>构建中的依赖项。添加了gradle</code>,在<code>应用程序中添加了f

  • 问题:是否可以在迁移脚本中创建一个新的DB,然后连接到它?怎么做? 我的场景:我试图在我的Java项目(使用Jersey2.4+Tomcat7+PostgreSQL 9.3.1+EclipseLink的RESTful应用程序)中使用flyway来管理使用Git的不同开发人员之间的更改。我编写了我的init脚本并运行它: 而且效果很好。问题是我不能用我的脚本创建新的DB。当我在脚本中包含以下一行时:

  • 问题内容: 我有以下情况。我在spring使用JPA: 当一切正常时,数据可以毫无问题地保存在数据库中。但是,当引发异常时,我需要方法 updateSampleObject(so) 将信息保留在数据库中。这不是正在发生的事情。如果抛出异常,方法 updateSampleObject也 将回滚,这不是我所需要的。我需要这两个方法( createSampleObject 和 updateSampleO