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

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

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

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

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

阅读 8.9k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题