SpringDataJpa是如何让oracle的表id自增的?

发布于 2022-09-07 07:51:38 字数 172 浏览 12 评论 0

用过oracle的都知道,oracle要做自增id,一般都是用序列来实现。

我在实体上只标记了@Id,没有标记到其他额外的注解了,本来以为save的时候会出错,结果居然帮我自增id了。

spring-data-jpa究竟在哪里维护了一个自增记录的?

有相关官方文档解析吗?求大神指点。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

美羊羊 2022-09-14 07:51:38

@GeneratedValue
允许持久性实现自动为标识字段分配唯一值通常是很方便的。JPA 包含此目的的 GeneratedValue 注解。它具有以下属性:

GenerationType 策略: 枚举值, 指定如何自动生成字段值。GenerationType 枚举具有以下值:

GeneratorType.AUTO: 默认值。为字段分配生成的值, 由JPA 供应商决定实现(如hibernate)。

GenerationType.IDENTITY: 数据库将在插入时分配标识值,如MySQL的auto_increment。

GenerationType.SEQUENCE: 使用数据库序列生成字段值,如oracle。

GenerationType.TABLE: 使用序列表生成字段值。如下例

@Entity
@Table(name = "JPAGEN_PERSON")
public class Person implements Serializable {
     
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE,
            generator = "personGen")
    @TableGenerator(name = "personGen",
            table = "JPAGEN_GENERATORS",
            pkColumnName = "NAME",
            pkColumnValue = "JPAGEN_PERSON_GEN",
            valueColumnName = "VALUE")
    private long id;
 
    // other fields and methods are omitted 
}

至于你说的采用哪种方式还是和jpa的实现有关, 你可以看看这个链接

https://docs.spring.io/spring...

但因为底层还是hibernate实现,你可以参考一下hibernate的实现

http://docs.jboss.org/hiberna...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文