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

Hibernate, id, oracle, chuỗi

Tôi cũng có một projet trong đó Oracle DB cung cấp dữ liệu cho các lớp @Entity của tôi. Như bạn đã nói, một chuỗi tạo id cho PK của bảng thông qua một trình kích hoạt. Đây là các chú thích mà tôi đã sử dụng trong một trong các lớp sau:

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "G1")
@SequenceGenerator(name = "G1", sequenceName = "LOG_SEQ")
@Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
public int getId() {
    return this.id;
}

Đây là cú pháp thứ hai mà bạn đã hiển thị trong bài đăng của mình. Không có lệnh gọi đến trình kích hoạt trong mã Java vì trình kích hoạt được quản lý bởi DB. Tôi nhớ rằng tôi phải có trình tự và trình kích hoạt cùng một lúc trong DB nếu tôi không muốn gặp sự cố. Trình kích hoạt hỏi id của hàng cần chèn là null hay =0. Trong trường hợp này, chuỗi LOG_SEQ được gọi.

Vì vậy, nếu bạn cung cấp một giá trị cho @Id của thực thể của mình, nó có thể được chèn vào DB (nếu Id đó không tồn tại) và chuỗi sẽ không được gọi. Hãy thử xem mã của trình kích hoạt để biết chính xác điều gì xảy ra.




  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ập nhật câu lệnh với tham gia bên trong trên Oracle

  2. Toán tử tập hợp Oracle

  3. chỉ số giảm oracle nếu tồn tại

  4. Làm cách nào để bỏ qua dấu và trong tập lệnh SQL chạy từ SQL Plus?

  5. Nhận id của một chèn trong cùng một câu lệnh