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

如何使用Hibernate和Flyway管理唯一的ID?

栾弘新
2023-03-14

下面是我的实体类的一个片段

@Entity
public class User {

    @Id
    @GeneratedValue
    private long id;

    private String firstName;
    private String lastName;

当使用(Spring Boot Hibernate)Spring Boot-setups模式时,会自动包含如下序列

Hibernate: create sequence hibernate_sequence start with 1 increment by 1

但是我使用Flyway 5.0.7来设置我的模式。在这种情况下,我收到下面的错误,这意味着没有创建序列。

Sequence "HIBERNATE_SEQUENCE" not found; SQL statement

我能够通过使用如下所示的飞行脚本创建序列来解决此问题

create sequence HIBERNATE_SEQUENCE start with 1001;

但是现在这个序列被用来为我不想要的所有实体生成ID。我希望每个实体都有自己独立的序列。

在使用Flyway时,是否可以使用Hibernate创建序列?否则手动为所有实体创建数百个序列是不切实际的。

有什么替代方法来处理这个问题吗?

共有1个答案

龚迪
2023-03-14

Flyway是一个DB迁移工具,它不知道任何DDL/DML更改,除非您告诉它(通过locations属性中的新脚本)。

如果Hibernate处理了其中的一些更改(在您的案例中是序列),Flyway将不会知道这些更改,并将使用它已经知道的任何序列。

正常的做法是让Flyway知道您的更改,例如,这包括新实体的新序列,就像您对实体的模式本身所做的那样。我个人的建议是在一个地方管理你所有的模式变更,所以如果你正在使用Flyway,那么让它负责所有的变更。

 类似资料:
  • 问题内容: 我正在编写一个使用GWT,Hibernate和Google Guice(带有GIN)的相当简单的应用程序。我想做的是使用外部管理器(例如在Spring中使用)来管理事务 ,而不是使用。我尝试使用,但似乎不适用于我。 我已经使用注入了EntityManager ,如下所示: 手动管理事务时,它似乎可以正常工作。我希望自动管理事务,也希望使用DBUnit进行自动化测试。 有人知道如何解决吗

  • 问题内容: 我有一个实体类的两个字段,我不希望它们是唯一的,而是用作本身必须是唯一的键的复合字段。例如,我有两个字段(名称和版本),这些字段对于其他记录可以相同,但它们必须唯一。使用Hibernate(带有注释)做到这一点的最佳方法是什么?我正在将Hibernate Validator用于其他字段,但不确定如何使用该方法来验证两个字段一起组成唯一键。我正在使用具有id泛型类型的泛型实体类,可以将其

  • 我目前正在开发一个使用Spring Boot和Spring Data(准确地说是其接口)以及Hibernate的应用程序。 我喜欢Hiberante的一个特性是它的缓存特性--当您提交多个与特定对象匹配的查询时,您将在每次执行查询时返回该对象的相同实例(相对于Java的==运算符)。但是,在使用Spring数据和类时,情况似乎并不总是这样。因此,我假设这里有多个实例在工作。 因此,我的问题是:Sp

  • 我想在我的ScrollView及其子视图上检测手势。我希望所有这些onClick方法也能工作。假设有一个被LinearLayout包围的按钮,整个按钮被ScrollView包围。当用户在滚动视图的任何地方滑动时,我想调用一个动作..< br >我将onTouchListener应用于ScrollView..但是由于LinearLayout是可点击的,所以当我滑过linear layout时,事件不

  • 问题内容: 如何使用数据库查询回调设置变量值?我该怎么办? 问题答案: 自从使用node.js已经有一段时间了,但是我想我可以提供帮助。 首先,在node中,您只有一个线程,应该使用回调。您的代码将发生的情况是查询将排队等待执行,但是循环将毫无意义地连续作为繁忙循环运行。 您应该可以通过以下回调来解决您的问题: 并这样使用 我在大约2年内没有编写任何node / js的代码,也没有进行测试,但是基

  • 问题内容: 如何在hibernatePOJO上实现我的唯一约束?假设数据库不包含任何内容。 我在注解中看到了唯一属性,但无法正常工作吗? 如果我想将此约束应用于多个列怎么办? 问题答案: 基本上,没有数据库支持就无法实现唯一约束。 和属性是架构生成工具生成相应约束的指令,它们本身并没有实现约束。 您可以在插入新实体之前进行某种手动检查,但是在这种情况下,您应该意识到并发事务可能存在的问题。 因此,