2011-09-12 19 views
15

Có đúng là tôi không bao giờ cần sử dụng EntityManager#merge(), miễn là tôi chỉ xử lý đính kèm pháp nhân được quản lý? Nói cách khác, gọi merge() trên một số đính kèm thực thể được quản lý không có hiệu lực?JPA: đang hợp nhất bao giờ cần thiết cho các thực thể được đính kèm?

Hoặc có trường hợp nào việc hợp nhất sẽ phục vụ mục đích không? Tôi tìm tên cho thấy rằng tôi có thể sử dụng nó để đối phó với một OptimisticLockException ... :)

Sửa: Trong điều kiện rất đơn giản, sự hiểu biết của tôi về một quản lý Entity là thay đổi thuộc tính của nó/lĩnh vực được tiếp tục với DB ở cuối giao dịch.

Trả lời

15

Các đặc điểm kỹ thuật nói rằng:

Nếu X là một thực thể quản lý, nó sẽ bị bỏ qua bởi các hoạt động hợp nhất Tuy nhiên, các hoạt động hợp nhất được cascaded để tổ chức tham chiếu bởi các mối quan hệ từ X nếu những mối quan hệ có được được chú thích với giá trị phần tử xếp chồng cascade=MERGE hoặc cascade=ALL chú thích.

+0

Thx! Được quản lý == được đính kèm? Bạn có thể vui lòng giải thích về các thực thể thác tham chiếu (hoặc chỉ cho tôi hướng tới tài liệu để đọc) không? Tôi cho rằng đối với một thực thể được đính kèm, tất cả các thực thể được tham chiếu cũng được đính kèm ... – Hank

+0

được quản lý được đính kèm, vâng. Tài liệu tham khảo ? đặc tả JPA có lẽ ... chỉ cần tìm trong đó để "hợp nhất". – DataNucleus

+0

Phụ thuộc vào việc thực hiện JPA bạn đang sử dụng nhưng 'Managed! = Attached'. Nếu bạn gửi một thực thể ra khỏi ngữ cảnh (nói với một cuộc gọi dịch vụ) và nhận lại nó sau này nó sẽ được gắn vào ngữ cảnh kiên trì, nhưng không được quản lý lại cho đến khi 'merge' được gọi trên nó. [EntityManager.Contains] (http://java.sun.com/javaee/5/docs/api/javax/persistence/EntityManager.html#contains (java.lang.Object)) sẽ cho bạn biết nếu đối tượng được quản lý. –

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