Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Oracle 12c自动身份生成与Hibernate、Spring和JPA结合使用?_Spring_Oracle_Hibernate_Spring Data Jpa - Fatal编程技术网

如何将Oracle 12c自动身份生成与Hibernate、Spring和JPA结合使用?

如何将Oracle 12c自动身份生成与Hibernate、Spring和JPA结合使用?,spring,oracle,hibernate,spring-data-jpa,Spring,Oracle,Hibernate,Spring Data Jpa,我将我的表定义为: CREATE TABLE MY_ENTITY ( ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY ); ALTER TABLE MY_ENTITY MODIFY (ID GENERATED AS IDENTITY START WITH LIMIT VALUE); 使用@GeneratedValuestrategy=GenerationType.SEQUENCE不会产生错误。 在手动插入一些带有固定ID的数据并更新序

我将我的表定义为:

CREATE TABLE MY_ENTITY (
  ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
);
ALTER TABLE MY_ENTITY MODIFY (ID GENERATED AS IDENTITY START WITH LIMIT VALUE);
使用@GeneratedValuestrategy=GenerationType.SEQUENCE不会产生错误。 在手动插入一些带有固定ID的数据并更新序列后,我注意到ID实际上不是由Oracle生成的。我像这样更新了序列:

CREATE TABLE MY_ENTITY (
  ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
);
ALTER TABLE MY_ENTITY MODIFY (ID GENERATED AS IDENTITY START WITH LIMIT VALUE);

如何让Hibernate/JPA使用Oracle 12c标识生成器?

要使用Oracle 12c标识生成器,请至少使用Hibernate 5.3。例如:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>5.4.4.Final</version>
</dependency>
给定具有自动生成主键的表:

CREATE TABLE MY_ENTITY (
  ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
);
在JPA实体上使用GenerationType.IDENTITY作为策略

@Entity
@Table(name = "MY_ENTITY")
public class MyEntity {

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // the rest of your properties

}
要检查它是否工作,请使用以下内容更新自动生成的序列:

ALTER TABLE MY_ENTITY MODIFY (ID GENERATED AS IDENTITY START WITH 10000);

插入新条目时,其ID应为10001、10002等。

请参阅答案。请注意,您的数据库是Oracle 12c,您的属性jpa.database-platform是Oracle12cDialect,您的标识是列ID中的一个数字。良好的响应@chris,恭喜。默认值为NULL在此处至关重要。使用id DECIMAL19 DEFAULT my_sequence.nextval将不起作用。@JRA_TLL如何注释id字段以获得默认情况下在NULL AS IDENTITY上生成的确切ddl:?我想使用ddl自动=create@brsgrlr:不知道,从未使用过ddl auto=create@brsgrlr:ddl auto=create不建议用于生产。我建议用Flyway或Liquibase来代替。