往DAO類(lèi)中注入@PersistenceContext和@Resource的區(qū)別詳解
DAO類(lèi)注入@PersistenceContext和@Resource區(qū)別
@PersistenceContext
private EntityManager em;
注入的是實(shí)體管理器,執(zhí)行持久化操作的,需要配置文件persistence.xml。
注入一堆保存實(shí)體類(lèi)狀態(tài)的數(shù)據(jù)結(jié)構(gòu),針對(duì)實(shí)體類(lèi)的不同狀態(tài)(四種,managedh或detached等)可以做出不同的反應(yīng)(merge,persist等等),其實(shí)就是把數(shù)據(jù)從數(shù)據(jù)庫(kù)里提出,然后在內(nèi)存里處理的,再返回?cái)?shù)據(jù)庫(kù)的法則。
@Resource
是注入容器提供的資源對(duì)象,比如SessionContext MessageDrivenContext?;蛘吣隳莻€(gè)name指定的JNDI對(duì)象
可以理解為資源->數(shù)據(jù)源->也就是數(shù)據(jù)連接,基本上就是告訴程序數(shù)據(jù)庫(kù)在哪里
JPA中為什么EntityManager的注解要用@PersistenceContext
在使用SpringJPA的時(shí)候,看到如下代碼
@PersistenceContext private EntityManager entityManager;
于是就有些好奇,這個(gè)@PersistenceContext是幾個(gè)意思,如果是實(shí)體注入的話,統(tǒng)一采用
@Autowired可以嗎?于是上網(wǎng)查了下,幾乎所有的EntityManager都是采用這個(gè)注解的,就去找了找原因。
根據(jù)上面的描述,總結(jié)如下
- @PersistenceContext是jpa專(zhuān)有的注解,而@Autowired是spring自帶的注釋
- EntityManager不是線程安全的,當(dāng)多個(gè)請(qǐng)求進(jìn)來(lái)的時(shí)候,spring會(huì)創(chuàng)建多個(gè)線程,@PersistenceContext就是用來(lái)為每個(gè)線程創(chuàng)建一個(gè)EntityManager的,而@Autowired只創(chuàng)建了一個(gè),為所有線程共用,有可能報(bào)錯(cuò)
- 在使用EntityManager的時(shí),請(qǐng)采用@PersistenceContext進(jìn)行注解,而不要使用@Autowired
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java通過(guò)Freemarker模板實(shí)現(xiàn)生成Word文件
FreeMarker是一款模板引擎: 即一種基于模板和要改變的數(shù)據(jù), 并用來(lái)生成輸出文本的通用工具。本文將根據(jù)Freemarker模板實(shí)現(xiàn)生成Word文件,需要的可以參考一下2022-09-09淺談Java如何實(shí)現(xiàn)一個(gè)基于LRU時(shí)間復(fù)雜度為O(1)的緩存
這篇文章主要介紹了淺談Java如何實(shí)現(xiàn)一個(gè)基于LRU時(shí)間復(fù)雜度為O(1)的緩存,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08springboot @Valid注解對(duì)嵌套類(lèi)型的校驗(yàn)功能
這篇文章主要介紹了springboot~@Valid注解對(duì)嵌套類(lèi)型的校驗(yàn),主要介紹 @Valid在項(xiàng)目中的使用,需要的朋友可以參考下2018-05-05使用Java實(shí)現(xiàn)DNS域名解析的簡(jiǎn)單示例
這篇文章主要介紹了使用Java實(shí)現(xiàn)DNS域名解析的簡(jiǎn)單示例,包括對(duì)一個(gè)動(dòng)態(tài)IP主機(jī)的域名解析例子,需要的朋友可以參考下2015-10-10Spring boot 集成 Druid 數(shù)據(jù)源過(guò)程詳解
這篇文章主要介紹了Spring boot 集成 Druid 數(shù)據(jù)源過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08JAVA匿名內(nèi)部類(lèi)語(yǔ)法分析及實(shí)例詳解
這篇文章主要介紹了JAVA匿名內(nèi)部類(lèi)語(yǔ)法分析及實(shí)例詳解,匿名內(nèi)部類(lèi)可以使你的代碼更加簡(jiǎn)潔,它與局部類(lèi)很相似,不同的是它沒(méi)有類(lèi)名,如果某個(gè)局部類(lèi)你只需要用一次,那么你就可以使用匿名內(nèi)部類(lèi)。對(duì)此感興趣的可以了解一下2020-07-07springboot加載復(fù)雜的yml文件獲取不到值的解決方案
這篇文章主要介紹了springboot加載復(fù)雜的yml文件獲取不到值的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Spring.Net在MVC中實(shí)現(xiàn)注入的原理解析
這篇文章主要介紹了Spring.Net在MVC中實(shí)現(xiàn)注入的原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09