2008-09-18 47 views
11

Có thể bỏ qua @GeneratedValue cho một ID trong Hibernate, chúng tôi có trường hợp, phần lớn thời gian chúng tôi muốn ID được đặt bằng cách sử dụng GeneratedValue, nhưng trong một số trường hợp, bạn muốn đặt ID theo cách thủ công .Bỏ qua GeneratedValue trong Hibernate

Điều này có thể thực hiện được không?

Trả lời

5

Tôi biết bạn có thể làm điều này trong đặc tả JPA, vì vậy bạn sẽ có thể trong Hibernate (sử dụng chú thích JPA +).

Nếu bạn chỉ cần điền vào trường ID của mô hình liên tục mới mà bạn đang tạo, khi bạn "Hợp nhất" mô hình đó vào EntityManager, nó sẽ sử dụng ID bạn đã đặt.

Tuy nhiên, quy trình này có phân nhánh. Bạn vừa mới sử dụng ID đó nhưng chuỗi được chỉ định bởi chú thích GeneratedValue không biết điều đó. Trừ khi bạn chỉ định ID không được giả mạo là LESS so với giá trị chuỗi hiện tại, bạn sẽ gặp sự cố khi chuỗi bắt kịp với giá trị bạn vừa sử dụng. Vì vậy, có lẽ tôi có thể thấy nơi bạn có thể muốn người dùng có thể chỉ định một ID, nhưng sau đó bạn cần phải nắm bắt ngoại lệ có thể (ID trùng lặp) có thể đến trong tương lai.

+0

Trong trường hợp của tôi, sẽ không có trùng lặp vì ID sẽ được tạo từ cùng một chuỗi trong cả hai trường hợp, chỉ ở các điểm khác nhau trong giao dịch. –

+1

Tôi có nghi ngờ về điều này, hãy xem các câu hỏi như http://stackoverflow.com/questions/3194721/bypass-generatedvalue-in-hibernate-merge-data-not-in-db và http://stackoverflow.com/questions/2108178/id-generatedvalue-nhưng-set-own-id-value. –

+2

Tôi không nghĩ điều này là chính xác. Nó chắc chắn không làm việc trong hibernate và tôi cũng có nghi ngờ rằng điều này sẽ làm việc với hầu hết các nhà cung cấp JPA. – cyberoblivion

Các vấn đề liên quan