Liên kết được cung cấp bởi okwap rất hữu ích. Để chắc chắn rằng nó sẽ không lọt qua, và làm theo các quy tắc ban, tôi đặt một bản sao ở đây:
- an EntityManager contains a persistence context, that will track
everything read through it, so to avoid bloated memory, you should
acquire a new one, or clear it at some point
- if you read the same object through two different EntityManager you
will get different objects back, so will loose object identity, which
is something to consider
Trên cơ sở đó, tôi sẽ thêm, mà đọc qua hai EntityManager khác nhau thậm chí có thể cung cấp cho các đối tượng với nội dung khác nhau , nếu một giao dịch cơ sở dữ liệu được thực hiện bởi người khác trong thời gian chờ đợi. Nhưng nếu đọc lặp đi lặp lại thông qua cùng một thực thể, lần đọc thứ hai sẽ chỉ nhận được objet từ bộ nhớ cache của thực thể, do đó, trạng thái mới hơn sẽ không hiển thị.
Khi sử dụng cách tiếp cận đầu tiên, đôi khi EntityManager không có trong 'sync' vì 'ThreadLocal' sẽ sinh ra EntityManager mới cho mỗi luồng. Tôi đã để lại chỉ với một lựa chọn: để tạo một EntityManager mới cho mỗi giao dịch. – user2198754
James Sutherland khuyến cáo sử dụng lại EntityManager trong khi yêu cầu. Lý do chính là chia sẻ ngữ cảnh liên tục. Bạn có đồng ý không? http://www.coderanch.com/t/550734/ORM/databases/Practise-EntityManager – okwap