使用 SQL 脚本创建休眠序列?

Hibernate sequence creation with SQL script?

提问人:Jack 提问时间:2/25/2023 最后编辑:Jack 更新时间:2/28/2023 访问量:315

问:

在我的 Spring Boot 应用程序中,我想对每个实体使用序列,如下所示:

@Entity
public class Author {
 
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "author_gen")
    @SequenceGenerator(name="author_gen", sequenceName = "author_seq")
    private Long id;
     
    ...
     
}

关于数据库端的序列生成,有不同类型的用法。所以;

1) 当仅使用 Hibernate 时,上述实现是否足以在数据库上创建序列?

2)除了上面的注释之外,当我使用Flyway或Spring Boot应用程序时,我是否还需要在数据库端手动创建序列?schema.sql

java 休眠 spring-data-jpa 序列

评论

0赞 Jack 2/25/2023
还有其他人在 Hibernate 中使用过序列吗?
0赞 Jack 3/1/2023
@NathanHughes你提到的好点,谢谢。在这一步,我很困惑。我想我应该将它们都用于开发和生产。
0赞 Jack 3/1/2023
@NathanHughes 因此,--> 1. 定义所有数据库对象(例如序列、索引等),然后从这些定义生成 SQL 脚本并将此脚本用作初始脚本或迁移脚本会不会很好?
0赞 Jack 3/1/2023
2. 如何在此模式创建中在 dev 和 prod 之间切换?我的意思是,您的设置是什么,何时更改它(例如切换到 prod 时)?您能举一个示例场景或步骤吗?ddl-auto
0赞 Jack 3/2/2023
我将使用多个application.properties,但即便如此,您能提供一些细节吗?例如,您可以使用 Hibernate 地图创建进行开发,并使用 flyway 进行生产等?

答:

1赞 jhonatapers 2/27/2023 #1

是的,这将为您创建一个序列。

您只需要在 jpa 属性中告知一些事情。

以下是我的应用的属性:

春天:

JPA:

show-sql: true

properties:

  hibernate:

   default_schema: controle_financeiro #if you have a default schema, if not you need to put it in the schema annotation = "your sequence schema" 

   auto_quote_keyword: true

    ddl-auto: create #!!MORE IMPORTANT!! here you inform to create the mapped entities

    format_sql: false #if you need formatted sql code

database: postgresql

database-platform: org.hibernate.dialect.PostgreSQLDialect #plataform

open-in-view: false

generate-ddl: true #if you need the generated DDL code, it will appear in the console

我用 JPA 创建的序列

数据库上的序列

我的代码

创建序列的另一种方法

评论

0赞 Jack 2/27/2023
谢谢朋友,投了赞成票。实际上,我对使用Hibernate / JPA或SQL脚本创建数据库元素感到困惑。例如,在使用 Flyway 时,我们禁用 ,然后,除了通知开发人员该表使用了序列之外,是否还需要使用?ddl-auto@SequenceGenerator()
0赞 jhonatapers 2/28/2023
还有其他几种方法可以在休眠中使用序列。我们目前的做法,是的,这是必要的,因为奇怪的事情开始发生,比如生成负值的序列。
0赞 jhonatapers 2/28/2023
我在答案中添加了另一种生成序列的方法