java - SQL 序列 : Hibernate and Liquibase

标签 java sql hibernate liquibase

我对数据库开发很陌生,所以也许这个问题并不完全正确,但如果有人能让我更清楚一点,我将不胜感激……我已经阅读了所有关于序列的内容,以及如何他们比身份更受欢迎。我有一个假设性的问题。如果我要使用序列与 Hibernate(数据插入)和 Liquibase(模式创建)一起生成我的 PK,那么定义序列的正确位置是什么?

例如:类级别的序列生成。

用户.java

@Entity
@Table(name = "USER")
public class User {

    @Id
    @SequenceGenerator(name = "USER_SEQ", sequenceName = "USER_SEQ")
    @GeneratedValue(strategy = SEQUENCE, generator = "USER_SEQ")
    @Column(name = "ID")
    private Long id;

    // other fields
}

或其他示例:模式级别的序列生成。

changelog.xml

<changeSet author="wesleyy">
    <createSequence catalogName="cat"
            cycle="true"
            incrementBy="1"
            maxValue="1000"
            minValue="10"
            ordered="true"
            schemaName="public"
            sequenceName="user_seq"
            startValue="1"/>
</changeSet>

是否需要在Liquibase和Hibernate中都定义一个序列?两者到底有什么区别?

最佳答案

通过 User 类中的行

@SequenceGenerator(name = "USER_SEQ", sequenceName = "USER_SEQ")
@GeneratedValue(strategy = SEQUENCE, generator = "USER_SEQ")

你说要 hibernate :对于插入数据库的每个对象 User,从名为 USER_SEQ 的序列中为主键赋予新值。

通过将描述的 changeSet 添加到 liquibase xml 脚本中,您对 liquibase 说:如果此 changeSet 尚未应用于数据库,则下次在名为 user_seq 的数据库序列中创建。

换句话说,您在 liquibase 脚本中创建序列,并在 User 类的代码中使用它。

关于java - SQL 序列 : Hibernate and Liquibase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48571685/

相关文章:

java - 什么时候使用 ConcurrentKafkaListenerContainerFactory?

java - 将 JSON 数组数据分组并计算是否有两个相同的值

java - 从 macOS 系统设置中获取日期和时间格式

mysql - 查询以显示第一个 future 事件和之后显示当前事件的时间事件

sql - Oracle 条件存储过程中的 WHERE

java - 在 Spring Boot 中创建新的实体对象

java - 如何通过阅读代码确定 Java 源代码的所有运行时(但不是静态)依赖项?

php - 基本站点搜索代码

java - 如何 hibernate 批量插入实时数据?使用还是不使用@Transactional?

java - Hibernate session 线程安全