簡體   English   中英

調用entityManager.find()是否需要EntityTransaction?

[英]Does calling entityManager.find() require an EntityTransaction?

我想搜索當前的持久性上下文,如果需要,還可以在支持數據庫中搜索實體的存在。 這是一個獨立的java-se應用程序。 (它不會在java-ee應用程序容器中運行。)我不必擔心線程安全。 我是否需要在EntityTransaction上下文中查詢數據庫?

一種或另一種方式存在根本差異嗎?

entityManager.getTransaction.begin();
MyEntity me = entityManager.find(MyEntity.class, myEntity.getPrimaryKey());
entityManager.getTransaction.commit();

否,對於只讀操作不是必需的。

放置類型為FORE_VERSION_INCREMENT的鎖或其他一些更高級別的鎖會使該操作變為只讀。 在這種情況下,它需要交易。

在某些情況下(涉及鎖), find確實需要事務處理。

參考3.1.1節(第79頁)中的官方JPA規范 (最終版本,JPA 2.1),我們發現:

find方法(只要它會被調用鎖定或與LockModeType.NONE調用)和getReference 不需要方法中在事務中調用。

在該方案中所描述你安全地調用em.find(..) 沒有 EntityTransaction

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM