Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hibernate Jpa - ngoại lệ vi phạm ràng buộc trên Khóa chính (Trình tự)

Phương ngữ 10 của Oracle

Đối với Oracle10gDialect sử dụng cấu hình này

@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;

Hibernate tạo một bảng và một chuỗi:

create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) not null, 
VALUE varchar2(255 char), 
primary key (MY_PRIMARY_KEY))

create sequence hibernate_sequence 

Trong khi lưu trữ, trước tiên hãy lấy ID trình tự mới và hơn là chuyển nó vào INSERT tuyên bố

select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)

Phương ngữ Oracle 12

Nếu bạn sử dụng Oracle 12 nguyên bản hỗ trợ IDENTITY column nó được ưu tiên nâng cấp lên Oracle12cDialect (lưu ý rằng điều này yêu cầu Hibernate 5.3)

Đặt strategy thành GenerationType.IDENTITY

@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;

Bảng sau được tạo - phần quan trọng là generated as identity cung cấp các khóa cung cấp duy nhất. Lưu ý rằng không có sequence nào giải thích bắt buộc phải được tạo, nó được quản lý nội bộ.

create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity, 
VALUE varchar2(255 char), 
primary key (MY_PRIMARY_KEY))

Trong khi lưu trữ không có ID nào được chuyển vào INSERT , nó được Oracle gán và trả về phiên

insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ? 

Lưu ý rằng trái với Oracle 10, bạn lưu một chuyến khứ hồi vào cơ sở dữ liệu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có cách nào để sử dụng Linq với Oracle không

  2. Danh sách các tham số NLS trong Cơ sở dữ liệu Oracle

  3. Cách lấy dữ liệu từ một hàm pl / sql nếu một tham số có nhiều hơn một giá trị trong hàm với một tham số

  4. Làm cách nào để bạn thực thi SQL từ bên trong một tập lệnh bash?

  5. Làm thế nào để tổng hợp mà không sử dụng `GROUP BY`?