cuốn sách gpt4 ai đã làm

java - JPA 的持续调用是否区分具有单个 PK 列的实体和具有复合 PK 的实体?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 20:10:42 28 4
mua khóa gpt4 Nike

Chúng tôi có hai thực thể trong hệ thống của chúng tôi như sau:

  • Hóa đơn:[InvoiceID, OrgID] là khóa chính được biểu diễn dưới dạng Bean và sử dụng @IdClass Ghi chú được liên kết với Hóa đơn

  • Trạng thái quy trình làm việc:Id trạng thái quy trình công việc là sử dụng @Id Chú thích xác định cột khóa chính.

Trong cả hai thực thể, các trường ID (InvoiceID, WorkflowStateId) được tạo tự động bằng cách sử dụng các chuỗi cơ sở dữ liệu.

Khi cuộc gọi vẫn tiếp tục trên phiên bản Hóa đơn mới được tạo, khi chúng tôi đặt InvoiceID thành -1 , phiên bản sẽ được duy trì và ID sẽ được tạo chính xác.

Nhưng khi WorkflowStateID được đặt thành -1 Khi liên tục được gọi trên phiên bản WorkflowStates mới được tạo,vẫn tồn tại() Cuộc gọi sẽ đưa ra một ngoại lệ:

 org.hibernate.PersistentObjectException: thực thể tách rời được chuyển sang tồn tại: 

nếu như vẫn tồn tại() Tôi không thể tìm thấy nhiều thông tin khi tìm kiếm xem phương thức này có hoạt động khác nhau đối với các thực thể có một cột duy nhất là PK và các thực thể có PK tổng hợp hay không. Có ai biết thêm về điều này?

câu trả lời hay nhất

Tôi nghĩ bạn đang gặp phải ngoại lệ này vì bạn đang chỉ định một id cho tính bền vững trong khi bạn chỉ định trong ánh xạ rằng id được tạo tự động.

Khi bạn thực hiện Persist(), chế độ ngủ đông sẽ cho rằng đối tượng này đã tồn tại trong cơ sở dữ liệu của bạn (dựa trên thực tế là đối tượng của bạn đã có Id)... nhưng thực tế không phải vậy. Đó là lý do tại sao bạn nhận được ngoại lệ.

Vì vậy, tôi khuyên bạn nên xóa tất cả setId(-1). (Giữ id trống trước đối tượng đang tồn tại)

biên tập

Có một số khác biệt trong cách chế độ ngủ đông phát hiện xem một thực thể có tồn tại lâu dài hay không bất cứ khi nào nó có một cột Id hoặc Id tổng hợp. (Tôi biết điều đó vì tôi đã xem mã nhưng không tìm thấy gì trong tài liệu).

Tôi đề nghị bạn DefaultPersistEventListener.onPersist Đặt một điểm ngắt vào và xem điều gì sẽ xảy ra. Hoặc kích hoạt ghi nhật ký gỡ lỗi ngủ đông và phân tích nó.

Về java - Cuộc gọi liên tục của JPA có phân biệt giữa các thực thể có một cột PK duy nhất và các thực thể có PK tổng hợp không? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/13990006/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress