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

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

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

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

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

阅读 3.6k
评论
    1 个回答
    • 11.2k

    @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...

      撰写回答

      登录后参与交流、获取后续更新提醒