chr*_*ris 5 oracle spring hibernate spring-data-jpa
我已经这样定义了我的表:
CREATE TABLE MY_ENTITY (
ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
);
Run Code Online (Sandbox Code Playgroud)
使用@GeneratedValue(strategy = GenerationType.SEQUENCE)
不会产生错误。手动插入一些具有固定 ID 的数据并更新序列后,我注意到 ID 实际上并不是由 Oracle 生成的。我像这样更新了序列:
ALTER TABLE MY_ENTITY MODIFY (ID GENERATED AS IDENTITY START WITH LIMIT VALUE);
Run Code Online (Sandbox Code Playgroud)
如何让 Hibernate/JPA 使用 Oracle 12c 身份生成器?
chr*_*ris 12
要使用 Oracle 12c 身份生成,请至少使用Hibernate 5.3。例子:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.4.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
您的application.properties
遗嘱需要提供Oracle12cDialect
.
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
spring.datasource.platform=oracle
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@hostname:1521:MYSID
spring.datasource.username=MY_USER
spring.datasource.password=$ecret
spring.jpa.hibernate.ddl-auto=none
Run Code Online (Sandbox Code Playgroud)
给定一个具有自动生成主键的表:
CREATE TABLE MY_ENTITY (
ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
);
Run Code Online (Sandbox Code Playgroud)
用作GenerationType.IDENTITY
JPA 实体上的策略。
@Entity
@Table(name = "MY_ENTITY")
public class MyEntity {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// the rest of your properties
}
Run Code Online (Sandbox Code Playgroud)
要检查它是否正常工作,请使用以下内容更新自动生成的序列:
ALTER TABLE MY_ENTITY MODIFY (ID GENERATED AS IDENTITY START WITH 10000);
Run Code Online (Sandbox Code Playgroud)
插入新条目时,它们的 ID 应类似于10001
、10002
等。
归档时间: |
|
查看次数: |
8478 次 |
最近记录: |