- 相關(guān)推薦
JPA面試常見(jiàn)問(wèn)題大全
這篇文章是摘自Patrick Linskey的一篇文章,主要是關(guān)于JPA相關(guān)內(nèi)容的問(wèn)答,相信JPA面試會(huì)碰到很多這里面的問(wèn)題
問(wèn)題:EJB專(zhuān)家團(tuán)隊(duì)是如何擺脫事務(wù)描述符的?
回答:在會(huì)話(huà)bean和消息驅(qū)動(dòng)bean中,可以通過(guò)描述符和注釋來(lái)控制事務(wù)的行為。此外,我們將默認(rèn)的事務(wù)屬性更改為“REQUIRED”,這個(gè)默認(rèn)值比以前的值“SUPPORTS”更常用。因此,完全不必為業(yè)務(wù)方法配置事務(wù)行為。
JPA實(shí)體僅供本地使用,重點(diǎn)關(guān)注域模型。因此,無(wú)法在JPA實(shí)體上配置事務(wù)性(或遠(yuǎn)程邊界或安全性)。而是必須使用會(huì)話(huà)bean fa?ade(或消息驅(qū)動(dòng)bean),才可以通過(guò)EJB協(xié)議使用這些實(shí)體。通常來(lái)說(shuō),這是一件好事,配置安全性、遠(yuǎn)程處理和事務(wù)的粒度應(yīng)該比持久化數(shù)據(jù)的粒度粗很多。JPA著重關(guān)注持久化數(shù)據(jù),以及與EJB的其他部分和Java EE規(guī)范集成起來(lái)照管其他企業(yè)關(guān)注點(diǎn)。
問(wèn)題:推薦對(duì)主鍵使用“l(fā)ong”還是“Long”?如果允許使用null作為值,將會(huì)如何?
回答:這實(shí)際上取決于您的數(shù)據(jù)模型。如果您的數(shù)據(jù)模型允許主鍵為null,那么使用Long,如果您的數(shù)據(jù)模型規(guī)定主鍵列不能為null,則使用 long更合適?偟膩(lái)說(shuō),我認(rèn)為對(duì)于非復(fù)合主鍵,允許null作為合法值容易產(chǎn)生混淆,因此我傾向于使用long,而不是Long。
問(wèn)題:您說(shuō)EJB 2.0不支持繼承,但是可以在幾個(gè)不同位置(遠(yuǎn)程/bean)使用繼承,只是不在本地使用而已。請(qǐng)解釋一下。
回答:根據(jù)EJB 2.1規(guī)范的附錄D3:
當(dāng)前的EJB規(guī)范未指定組件繼承的概念。
另一方面,JPA規(guī)范確實(shí)規(guī)定了實(shí)體繼承的概念。我們已經(jīng)處理了EJB 2.1規(guī)范中指出的各種問(wèn)題和復(fù)雜性,現(xiàn)在允許完全的多態(tài)查詢(xún)和關(guān)聯(lián)。
問(wèn)題:BEA計(jì)劃什么時(shí)候支持/發(fā)布EJB3?
WebLogic Server 10 Technology Preview 是完全符合規(guī)范的Java EE 5應(yīng)用服務(wù)器。它包括完整的EJB3支持。WebLogic Server 10大概于三月下旬發(fā)布。
此外,Kodo 是完全符合規(guī)范的生產(chǎn)就緒JPA實(shí)現(xiàn),并且已經(jīng)發(fā)布。
問(wèn)題:JPA是否支持組合主鍵?
回答:JPA支持自然ID和組合ID,以及數(shù)據(jù)庫(kù)指派或?qū)崿F(xiàn)指派的數(shù)字值。
問(wèn)題:是否存在Spring模板,像JDBC模板一樣可以在容器外部使用?
回答:是的,Spring 2有JPA模板。但是,Spring 2可以對(duì)任何標(biāo)記著@Repository的bean執(zhí)行JPA異常轉(zhuǎn)譯。因此,總的來(lái)說(shuō),對(duì)于新的應(yīng)用程序,最好直接使用JPA API,而不是另一個(gè)模板層。對(duì)于使用模板和正在遷移到JPA的現(xiàn)有應(yīng)用程序來(lái)說(shuō),使用模板方法比較合理。
此外,可以像在Java EE服務(wù)器中一樣將JPA的持久化單元部署到Spring,Spring對(duì)JPA規(guī)范中指出的EntityManager注入和查找服從容器規(guī)則。
問(wèn)題:JPA是否支持JDK1.4?
回答:JPA需要Java 5或更新版本。
問(wèn)題:使用范圍查詢(xún)時(shí),它是否也會(huì)返回結(jié)果總數(shù)?
回答:不,要想獲得總數(shù),必須發(fā)出另外一個(gè)查詢(xún)。通用模式是,在第一次執(zhí)行搜索時(shí)獲得總數(shù),然后通過(guò)頁(yè)面瀏覽結(jié)果,將總數(shù)存儲(chǔ)到方便的位置(會(huì)話(huà)狀態(tài)、cookie等):
問(wèn)題:具有JPA包裝器的Hibernate是不是一種EJB3實(shí)現(xiàn)?
回答:JPA規(guī)范是完整的EJB3規(guī)范的子集,因此JPA實(shí)現(xiàn)本身不是完整的EJB3實(shí)現(xiàn)。我不了解RedHat的EJB3實(shí)現(xiàn)的情況如何。但,Hibernate是JPA實(shí)現(xiàn)。
問(wèn)題:與Hibernate相比,JPA是不是更好?
回答:JPA是規(guī)范,而Hibernate是實(shí)現(xiàn)。因此,這是不同事物的比較?梢钥隙ǎ褂脴(biāo)準(zhǔn)API比使用專(zhuān)有API有更多優(yōu)勢(shì),但不存在真正的劣勢(shì)。
問(wèn)題:是不是不再需要學(xué)習(xí)和使用Hibernate?
回答:規(guī)范團(tuán)隊(duì)關(guān)于JPA 1的目標(biāo)之一是制定一個(gè)可以由很多供應(yīng)商實(shí)現(xiàn)的API,并且開(kāi)發(fā)人員可以編碼來(lái)實(shí)現(xiàn)該API,而不是使用私有供應(yīng)商特有的API。我們已成功實(shí)現(xiàn)這個(gè)目標(biāo),因此您只需使用供應(yīng)商特有的API來(lái)獲得JPA規(guī)范沒(méi)有解決但您的應(yīng)用程序中需要的功能。我的建議是盡可能地使用JPA API,但是當(dāng)需要供應(yīng)商公開(kāi)但是規(guī)范中沒(méi)有提供的功能時(shí),則使用供應(yīng)商特有的API。
例如,OpenJPA提供了保存點(diǎn)功能,但JPA規(guī)范沒(méi)有。因此,希望使用保存點(diǎn)的OpenJPA開(kāi)發(fā)人員應(yīng)該對(duì)代碼的大部分內(nèi)容使用JPA規(guī)范,而借助OpenJPAEntityManager來(lái)設(shè)置和管理保存點(diǎn)。
問(wèn)題:規(guī)范是否解決了緩存問(wèn)題?
回答:JPA規(guī)范沒(méi)有解決二級(jí)緩存問(wèn)題(EntityManagerFactory-級(jí)),但是提供了實(shí)現(xiàn)該緩存必須遵守的一些數(shù)據(jù)鎖定和一致性規(guī)則,即使在啟用緩存時(shí)也是如此。
有少量與緩存有關(guān)的主題可能會(huì)在將來(lái)的JPA規(guī)范版本中解決,但是大多數(shù)緩存主題不必指定規(guī)則,這樣,不同的供應(yīng)商就可以輕松地完成不同的工作。此處增加的最重要的內(nèi)容是一些基本緩存控制API,如回收某些對(duì)象ID,或?qū)⒁恍┙?jīng)常訪(fǎng)問(wèn)的ID固定到緩存中。
問(wèn)題:既然實(shí)體管理器承擔(dān)了所有繁重的工作負(fù)載,那么會(huì)話(huà)bean還有什么價(jià)值?
回答:EntityManager負(fù)責(zé)域?qū)ο竽P秃蛿?shù)據(jù)庫(kù)之間的交互,但是仍然在會(huì)話(huà)中實(shí)現(xiàn)安全性、事務(wù)控制、遠(yuǎn)程處理、有狀態(tài)的臨時(shí)數(shù)據(jù)存儲(chǔ),而操作單元編程模型無(wú)法解決以上問(wèn)題。會(huì)話(huà)bean還是部署單元和公用服務(wù)邊界。因此,會(huì)話(huà)bean是定義所有業(yè)務(wù)代碼的地方。換而言之,會(huì)話(huà)bean是EJB 容器關(guān)注的,而JPA實(shí)現(xiàn)是在會(huì)話(huà)bean中使用的。
當(dāng)然,您還可以直接從servlet或JSP或其他任何可以使用Java 5的地方使用JPA。但是這樣的話(huà),您就必須管理自己的事務(wù)、處理自己的集群服務(wù)故障轉(zhuǎn)移、管理自己的服務(wù)重部署等。
問(wèn)題:相對(duì)于EJB2來(lái)說(shuō),EJB3可以處理多少個(gè)并發(fā)事務(wù)?
回答:從純會(huì)話(huà)bean的觀點(diǎn)來(lái)講,至少在WebLogic Server中,并發(fā)事務(wù)的數(shù)目沒(méi)有什么差別。也就是,如果將您的應(yīng)用程序從EJB2會(huì)話(huà)bean轉(zhuǎn)換到EJB3會(huì)話(huà)bean,但是完全沒(méi)有修改持久化機(jī)制,可能不會(huì)發(fā)現(xiàn)重大差別。這是因?yàn)镋JB3規(guī)范對(duì)會(huì)話(huà)bean部分的大多數(shù)更改著重實(shí)現(xiàn)編程模型的改進(jìn)。
從實(shí)體bean的觀點(diǎn)來(lái)講,我認(rèn)為對(duì)于大多數(shù)應(yīng)用程序,WebLogic Server的EJB 2.1和JPA支持的并發(fā)事務(wù)數(shù)目相同。您可能發(fā)現(xiàn)JPA對(duì)于非主鍵的查詢(xún)來(lái)說(shuō),可伸縮性更高。一旦開(kāi)始鉆研Kodo的 鎖定組之類(lèi)的功能,則對(duì)于固定的域模型,可以從基于JPA的系統(tǒng)中獲得更多并發(fā)事務(wù)。
問(wèn)題:如何為AquaLogic DSP應(yīng)用JPA?
回答:AquaLogic DSP著重關(guān)注對(duì)數(shù)據(jù)的多重存儲(chǔ)訪(fǎng)問(wèn),并將數(shù)據(jù)作為數(shù)據(jù)服務(wù)提供,通常作為XML或SDO呈現(xiàn)這些數(shù)據(jù)。JPA規(guī)范著重關(guān)注與數(shù)據(jù)存儲(chǔ)交互的Java API。可以設(shè)想,JPA綁定到AquaLogic DSP,或SDO綁定到Kodo產(chǎn)品(BEA的JPA實(shí)現(xiàn))。
問(wèn)題:什么是實(shí)現(xiàn)過(guò)程的最佳位置,例如,檢查許多用戶(hù)及其帳戶(hù)(在銀行應(yīng)用程序中)以付給利息?是在數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程中實(shí)現(xiàn),還是在EJB中使用JPA實(shí)現(xiàn),還是同時(shí)使用這兩種方式?
回答:根據(jù)我的經(jīng)驗(yàn),這實(shí)際上取決于組織因素,而不是其他因素。一些工作室更喜歡在存儲(chǔ)過(guò)程中進(jìn)行大量編碼,而另一些則喜歡在Java中實(shí)現(xiàn)其業(yè)務(wù)邏輯。每種方法各有優(yōu)勢(shì)和代價(jià)。
盡管如此,還是有一些問(wèn)題可促使他們優(yōu)先考慮其中的一種環(huán)境。在您的例子中,在數(shù)據(jù)庫(kù)中執(zhí)行大量計(jì)算可能比將數(shù)據(jù)加載到內(nèi)存中更快,因此使用存儲(chǔ)過(guò)程可能比較合理。另一方面,數(shù)據(jù)庫(kù)承擔(dān)這么多負(fù)載將對(duì)該應(yīng)用程序的用戶(hù)產(chǎn)生負(fù)面影響,因此最好付出一定代價(jià)跨網(wǎng)絡(luò)拉出這些數(shù)據(jù),以便將該數(shù)據(jù)庫(kù)用作嚴(yán)格的存儲(chǔ)系統(tǒng),而不是計(jì)算引擎。或者,如果應(yīng)用程序的其余部分主要使用JPA,則適用的話(huà),可能希望使用JPQL的大批量更新功能來(lái)進(jìn)行更新。
問(wèn)題:如果不先將數(shù)據(jù)加載到內(nèi)存中,是否可以執(zhí)行大批量更新?
回答:是的,可以通過(guò)JPQL執(zhí)行大批量更新和大批量刪除:
UPDATE Employee e SET e.salary = e.salary * 1.1 WHERE e.salary < 100000
問(wèn)題:你們對(duì)Kodo JDO有什么規(guī)劃?JPA是否會(huì)通過(guò)實(shí)現(xiàn)JDO的所有功能而將其取代?如果是的話(huà),是否存在任何時(shí)間表?如果不是,你們會(huì)不會(huì)繼續(xù)積極地開(kāi)發(fā)JDO?
回答:BEA仍然完全忠于JDO。從規(guī)范的觀點(diǎn)來(lái)看,我認(rèn)為過(guò)一段時(shí)間之后,JPA將包含當(dāng)前的JDO規(guī)范中越來(lái)越多的功能。但是,我不了解Sun對(duì)JDO和JPA之間的融合工作有什么規(guī)劃。
問(wèn)題:什么是持久化單元?
回答:持久化單元是類(lèi)和配置設(shè)置的集合,可以根據(jù)該集合創(chuàng)建EntityManagerFactory。它在 persistence.xml 文件中作為一個(gè)條目出現(xiàn)。
問(wèn)題:如何在WebLogic 9.2中測(cè)試JPA
回答:現(xiàn)在可以在WebLogic 9.2中使用OpenJPA或Kodo。該服務(wù)器不執(zhí)行會(huì)話(huà)bean持久化單元注入,但是在10.0服務(wù)器中可以這么作,并且在9.2中,沒(méi)有任何 Kodo控制臺(tái)集成。但是除了引導(dǎo)注入問(wèn)題之外,應(yīng)該能夠在WebLogic 9.2中成功地使用JPA,包括參與托管事務(wù)。
問(wèn)題:JDBC連接對(duì)應(yīng)于JPA中的什么概念?
回答:JPA EntityManager大致相當(dāng)于JDBC連接,而JPA EntityManagerFactory從概念上類(lèi)似于JDBC數(shù)據(jù)源。JPA EntityTransaction(僅在JTA / appserver上下文以外可用)相當(dāng)于JDBC連接的事務(wù)控制API。
在OpenJPA中,EntityManager在其生命周期中可能使用多個(gè)不同的JDBC連接。請(qǐng)參閱 openjpa.ConnectionRetainMode 屬性的文檔了解詳細(xì)信息。
問(wèn)題:關(guān)于fetch類(lèi)型,如果默認(rèn)是主動(dòng)(eager)加載,則提供程序可能忽略惰性(lazy)加載指令。因此,即使將字段設(shè)置為惰性,也可能會(huì)加載不必要的數(shù)據(jù)。將來(lái)的規(guī)范會(huì)不會(huì)將其修改為必須與fecth類(lèi)型一致?這會(huì)涉及到什么問(wèn)題?
回答:通常,OpenJPA永遠(yuǎn)不會(huì)忽略用戶(hù)配置的FetchMode。這是提示而不是規(guī)則,因?yàn)槎栊约虞d實(shí)際上是調(diào)優(yōu)過(guò)程中一項(xiàng)關(guān)注事項(xiàng),永遠(yuǎn)都不應(yīng)該對(duì)應(yīng)用程序產(chǎn)生行為性的影響*。JPA規(guī)范力圖避免要求使用任何明確的性能調(diào)優(yōu)策略,因?yàn)椴煌木W(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、數(shù)據(jù)存儲(chǔ)系統(tǒng)和應(yīng)用程序行為需要不同的調(diào)優(yōu)關(guān)注。
例如,OpenJPA允許在運(yùn)行時(shí) 動(dòng)態(tài)控制 fetch配置。這意味著,它可能靜態(tài)地配置對(duì)象模型,使某些字段進(jìn)行惰性加載,然后動(dòng)態(tài)地將其中一個(gè)字段添加到當(dāng)前的fetch計(jì)劃。這將導(dǎo)致OpenJPA違反靜態(tài)定義的惰性設(shè)置。
在當(dāng)天結(jié)束時(shí),如果實(shí)現(xiàn)對(duì)數(shù)據(jù)加載執(zhí)行錯(cuò)誤的操作,您應(yīng)能夠非常輕松地評(píng)估其他實(shí)現(xiàn),通過(guò)威脅轉(zhuǎn)移到另一個(gè)實(shí)現(xiàn),以至少獲得所需的功能。這是讓大量供應(yīng)商采用JPA規(guī)范的重大優(yōu)勢(shì)之一。
*當(dāng)然,如果您依靠惰性加載設(shè)置來(lái)防止加載某些數(shù)據(jù),以免后來(lái)傳輸?shù)讲煌膶?也就是為了數(shù)據(jù)安全性),那么惰性加載存在重要的行為性影響。在OpenJPA中,可以使用 fetch組 控制通過(guò)電纜發(fā)送數(shù)據(jù)圖時(shí)確切地分離哪些數(shù)據(jù)。
問(wèn)題:在運(yùn)行時(shí)更改fetch模式容不容易?
回答:JPA規(guī)范沒(méi)有為此提供任何工具。OpenJPA通過(guò) fetch規(guī)劃 接口提供了對(duì)fetch特征的詳細(xì)控制。JPQL的“JOIN FETCH”結(jié)構(gòu)也可以用于限制主動(dòng)fetch提示。
問(wèn)題:使用樂(lè)觀鎖定時(shí),@Version注釋僅支持int字段嗎,它可以是datetime嗎?
回答:根據(jù)JPA的要求,@Version可以對(duì)int、long、short、Integer、Short、Long和Timestamp類(lèi)型的字段使用。(JPA規(guī)范的第9.1.17小節(jié))。
問(wèn)題:在JPA可以調(diào)用存儲(chǔ)過(guò)程嗎?
回答:JPA規(guī)范僅要求支持SELECT SQL語(yǔ)句(通過(guò)EntityManager.createNativeQuery()調(diào)用,或@NamedNativeQuery注解或named- native-query XML元素)。但是,我認(rèn)為大多數(shù)實(shí)現(xiàn)也多少支持以相同方式調(diào)用存儲(chǔ)過(guò)程。
問(wèn)題:在EJB3中,更新實(shí)體bean的單個(gè)字段/列會(huì)導(dǎo)致更新該DB行中的所有字段/列,還是僅更新該DB行中更改的列?
回答:該行為取決于實(shí)現(xiàn)。OpenJPA將只更新被修改字段對(duì)應(yīng)的列。但是,我們可能在某些位置添加update-all-columns選項(xiàng)。請(qǐng)參閱 OPENJPA-38。
問(wèn)題:EJB3.0如何替換EJB2.0中的ejbLoad()、ejbStore()之類(lèi)的回調(diào)方法?
回答:JPA規(guī)范提供了一些可以隨意(單個(gè))實(shí)現(xiàn)的 回調(diào)方法。
問(wèn)題:EJB3.0如何替換EJB2.0 CMP和BMP?
回答:EJB3 JPA規(guī)范對(duì)EJB2 CMP提供了功能完善的替換。JPA規(guī)范沒(méi)有解決bean管理的持久化,如果您希望實(shí)現(xiàn)自己的持久化,應(yīng)該繼續(xù)使用BMP,或者最好使用會(huì)話(huà)bean fa?ade進(jìn)行自定義持久化。
問(wèn)題:命名查詢(xún)可以位于JPA實(shí)體以外嗎?就像在會(huì)話(huà)bean或幫助類(lèi)中那樣?
回答:JPA實(shí)現(xiàn)僅掃描實(shí)體類(lèi)(和映射超類(lèi)以及嵌入類(lèi))來(lái)查找命名查詢(xún)。我希望將來(lái)的JPA規(guī)范版本提供一種方式,用于將命名查詢(xún)限制到一個(gè)類(lèi)對(duì)象中,到那個(gè)時(shí)候,就可以認(rèn)為能夠在任何位置定義命名查詢(xún)。
可以在orm.xml文件中定義命名查詢(xún),然后使您的持久化單元指向該orm.xml文件,JPA規(guī)范允許將任意數(shù)目的orm.xml文件合并到一起。
問(wèn)題:JPQL支持多數(shù)據(jù)庫(kù)查詢(xún)嗎?
回答:JPA規(guī)范并不要求實(shí)現(xiàn)必須只使用單個(gè)數(shù)據(jù)庫(kù)(甚至實(shí)現(xiàn)必須使用關(guān)系數(shù)據(jù)庫(kù))。因此實(shí)現(xiàn)可以隨意提供對(duì)多個(gè)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)。但是,據(jù)我所知,當(dāng)前的JPA實(shí)現(xiàn)都沒(méi)有這么作,除非是通過(guò)數(shù)據(jù)庫(kù)方的工作來(lái)實(shí)現(xiàn)多數(shù)據(jù)庫(kù)查詢(xún)。
問(wèn)題:在JPQL中,SELECT子句可以從多個(gè)實(shí)體中拉出數(shù)據(jù)嗎?
回答:是的。JPQL語(yǔ)言允許查詢(xún)聚合和投影。因此以下語(yǔ)句是有效的JPQL語(yǔ)句:
select p.name, p.contactInfo.phoneNumber from Person p
select p.address.state, avg(p.salary) from Person p group by p.address.state
問(wèn)題:JPA規(guī)范是否解決了緩存問(wèn)題?
回答:JPA規(guī)范僅解決給定EntityManager相關(guān)對(duì)象的事務(wù)工作集的行為。它稱(chēng)之為“持久化上下文”。從某些方面來(lái)講,這是一個(gè)緩存,但通常是為了保持事務(wù)一致性,而不是為了性能的原因。
JPA規(guī)范沒(méi)有解決性能緩存,如OpenJPA的 數(shù)據(jù)緩存 和 查詢(xún)緩存。但是規(guī)范中的規(guī)則對(duì)這類(lèi)性能緩存暗示了某些行為約束。
總而言之,JPA規(guī)范主要關(guān)注的僅是API的行為方面,而由各種實(shí)現(xiàn)完成大多數(shù)性能有關(guān)的調(diào)優(yōu)。盡管如此,所有可靠的實(shí)現(xiàn)都應(yīng)該擁有某種數(shù)據(jù)緩存,以作為選擇。
問(wèn)題:WebLogic Server 9.0仍然僅支持EJB2.0,是嗎?
回答:正確。WebLogic Server 10.0是完全支持EJB3規(guī)范的第一款BEA產(chǎn)品。在WebLogic Server 9中可以通過(guò)BEA Kodo產(chǎn)品來(lái)使用JPA。
問(wèn)題:關(guān)于JPA的推薦教程是什么?
回答:Kodo文檔 中提供了許多JPA教程。
問(wèn)題:是否存在任何方式,用于跨所有實(shí)體表配置表前綴?
回答:JPA規(guī)范中沒(méi)有提供這種方式,在OpenJPA中,可以通過(guò)創(chuàng)建擴(kuò)展的 DBDictionary 并重寫(xiě)getValidTableName()方法來(lái)實(shí)現(xiàn)該功能。
問(wèn)題:JPA是否支持惰性加載?
回答:是的。默認(rèn)情況下,Collection和Map類(lèi)型的字段是惰性檢索的,而其他所有字段都是主動(dòng)獲取的。通過(guò)在字段的持久化注解中指明“fetch”屬性,可以基于各個(gè)字段靜態(tài)地控制該行為。
問(wèn)題:是否可能通過(guò)編程修改ORM綁定(如重寫(xiě)orm.xml中指定的一些ORM配置)?
回答:不是通過(guò)JPA規(guī)范實(shí)現(xiàn)的。OpenJPA提供了一些方法,用于以編程的方式創(chuàng)建映射信息,并且該規(guī)范確實(shí)提供了一種方法,用于在創(chuàng)建EntityManager時(shí),將特定于供應(yīng)商的重寫(xiě)內(nèi)容傳遞給persistence.xml中的數(shù)據(jù)。
問(wèn)題:我們正在構(gòu)建一個(gè)大型應(yīng)用程序,其中有350個(gè)對(duì)象堅(jiān)持JPA規(guī)范。當(dāng)我們使用Kodo 4.1持久化這些對(duì)象時(shí),它的SELECT查詢(xún)最終將每個(gè)查詢(xún)的大多數(shù)表連接起來(lái),這使得Kodo相當(dāng)慢。TopLink Essentials實(shí)現(xiàn)僅連接少量的相關(guān)表。您對(duì)解決該問(wèn)題有什么建議?
回答:我認(rèn)為這與“一對(duì)一”和“多對(duì)一”字段類(lèi)型的不同默認(rèn)行為有關(guān)。我猜想,如果您明確地告知Kodo對(duì)“一對(duì)一”和“多對(duì)一”字段類(lèi)型執(zhí)行惰性加載,就會(huì)很清楚。如果這不起作用,或者如果您希望獲得更多幫助來(lái)分析您的具體用例,請(qǐng)發(fā)送電子郵件到plinskey@bea.com。
問(wèn)題:開(kāi)發(fā)人員可以使用JPA來(lái)控制表的連接方式嗎?
回答:不能直接控制,并且不是通過(guò)規(guī)范實(shí)現(xiàn)的。但是,大多數(shù)實(shí)現(xiàn)可能提供了一些方式來(lái)影響如何連接。有關(guān)OpenJPA的詳細(xì)信息,請(qǐng)參閱關(guān)于 主動(dòng)fetching 的文檔。
問(wèn)題:在何處指定數(shù)據(jù)源?
回答:數(shù)據(jù)源通常是在persistence.xml中指定的,根據(jù)您的實(shí)現(xiàn)和應(yīng)用服務(wù)器的默認(rèn)行為,可能需要為jta-data-source和/或non-jta-data-source設(shè)置提供值。
問(wèn)題:JPA規(guī)范是否計(jì)劃在將來(lái)支持里程碑或雙時(shí)態(tài)鏈(bi-temporal)?
回答:據(jù)我所知,JPA規(guī)范團(tuán)隊(duì)目前沒(méi)有計(jì)劃提供任何時(shí)態(tài)功能。
問(wèn)題:如果拋出樂(lè)觀鎖定異常,可以了解哪些列發(fā)生沖突嗎
回答:不可以。您可以了解哪些實(shí)例失敗,但不是字段。給定失敗的實(shí)例,很容易從數(shù)據(jù)庫(kù)中加載新值,并進(jìn)行比較。
【JPA面試常見(jiàn)問(wèn)題】相關(guān)文章:
面試常見(jiàn)問(wèn)題10-04
it面試常見(jiàn)問(wèn)題06-08
mba面試常見(jiàn)問(wèn)題09-09
外企面試的常見(jiàn)問(wèn)題10-16
面試家教常見(jiàn)問(wèn)題06-21
關(guān)于面試常見(jiàn)問(wèn)題精選08-26
面試中常見(jiàn)問(wèn)題精選10-14
碩士面試常見(jiàn)問(wèn)題08-28