错题纠正
此題目考查的是對Hibernate中交叉連接的理解。HQL支持SQL風格的交叉連接查詢,交叉連接適用于兩個類之間沒有定義任何關聯時。在where字句中,通過屬性作為篩選條件,如統計報表數據。使用交叉連接時應避免“from Dept,Emp”這樣的語句出現。執行這條HQL查詢語句,返回DEPT表和EMP表的交叉組合,結果集的記錄數為兩個表的記錄數之積,也就是數據庫中的笛卡爾積。這樣的查詢結果沒有實際意義,因此選項b是正確的。A和C答案都是符合上述描述的,是適合使用交叉連接的場合。D答案認為以上三種都適合,與上述描述沖突。由于題目要求選擇不適合使用交叉連接的選項,因此選項B、C、D是錯誤的。
本題考核的是Hibernate-HQL查詢中的HQL概述。答案A中,HQL的select語句中的類名和屬性名是區分大小寫的;答案B中,HQL是支持統計函數的;答案D中,綁定參數的序號從0開始。所以ABD都不正確,只有C是正確的。因此答案是c。
此題考查的是:HQL查詢語句,及HQL語句的別名的命名規則,答案A中,select可以省略,是正確的;答案B中,表達的也是正確的;答案C中,HQL是支持聚合函數的,所以C的表達式錯誤的;答案D中,表達的也是正確的。本題選擇的是錯誤的表達,所以ABD都不符合,只有C符合。因此答案是c。 load()和get()都是先找緩存,再找數據庫。?不同點是在檢索時:? load()是延遲檢索,先返回代理對象,訪問對象時在發出sql命令?Get()是立即檢索,直接發出sql命令,返回對象 因此abc都是錯誤的,d是正確答案
one-to-one配置的查詢,必須查詢到另一個實體
此題目考查的是對Hibernate中迫切連接的簡單應用。Hibernate中的迫切連接是通過fetch關鍵字實現的,fetch關鍵字表明“左邊”對象用于與“右邊”對象關聯的屬性會立即被初始化,但可能會有一些重復的“左邊”對象。在一個Dept部門下有多個Emp員工的情況下,左外連接使用一個部門匹配一個員工的方式返回結果,因此造成結果集中出現重復的Dept部門對象的情況,因此選項B是正確的。A答案中的異常可能在session對象為null的情況下拋出,但題目的假設是session對象是正常開啟的并且未關閉,再者,就算是hql語句沒有查到結果,query.list方法也不會拋出NullPointerException異常,因此選項A是錯誤的。C答案是對迫切連接的原理理解不透徹造成的,迫切連接返回的List會采用“左邊”對象的泛型,而不是Object[],因此選項C是錯誤的。D答案只考慮了簡單的情況,在簡單情況下,即一個部門只有一個員工的情況,題目代碼是沒有問題的。但是考慮到一個Dept部門下有多個Emp員工的情況,題目代碼會返回包含重復Dept對象的List集合,因此,因此選項D是錯誤的。
此題目考查的是Hibernate連接查詢類型的掌握。 inner join [fetch]為內連接的語法,left [outer] join 為左外連接的語法,right [outer] join為左外連接的語法,[inner] join fetch為迫切內連接的語法,所以本題正確選項是C。
此題目考查的是對Hibernate中隱式和顯示內連接的簡單應用。在HQL查詢語句中,如果通過對Emp類賦別名“e”,可以通過e.dept.dname的形式訪問dept對象的dname屬性,使用隱式內連接按部門條件查詢員工信息,因此選項B是正確的。另外也可以顯式使用inner join關鍵字內連接e.dept對象,因此選項C也是正確的。A答案中雖然使用了inner join關鍵字,但是連接對象使用不正確,這樣做會導致“could not found the property Dept of Emp”的錯誤,即在Emp類中找不到叫作Dept的屬性。原因是Hibernate是一款基于ORM的解決方案,在HQL語句執行之前已經對表和持久化對象作了映射,Hibernate只知道Emp中有dept屬性,而不知道Dept,因此選項A是錯誤的。B答案是照搬SQL語句的寫法,該寫法用在HQL中會導致將“研發部”這個部門對象與每一個Emp員工對象匹配的結果,總記錄數等于Emp員工的記錄數,因此選項B是錯誤的。
此題目考查的是Hibernate查詢緩存適用的場合,對于經常使用的查詢語句,如果啟用了查詢緩存,當第一次執行查詢語句時,Hibernate會把查詢結果存放在第二緩存中。以后再次執行該查詢語句時,只需從緩存中獲得查詢結果,從而提高查詢性能。所以本題正確選項是AB。
本題考核的是Hibernate-HQL查詢中的HQL概述。答案A中,HQL的select語句中的類名和屬性名是區分大小寫的;答案B中,HQL是支持統計函數的;答案D中,綁定參數的序號從0開始。所以ABD都不正確,只有C是正確的。因此答案是c。
此題考查的是:HQL查詢語句,及HQL語句的別名的命名規則,答案A中,select可以省略,是正確的;答案B中,表達的也是正確的;答案C中,HQL是支持聚合函數的,所以C的表達式錯誤的;答案D中,表達的也是正確的。本題選擇的是錯誤的表達,所以ABD都不符合,只有C符合。因此答案是c。 load()和get()都是先找緩存,再找數據庫。?不同點是在檢索時:? load()是延遲檢索,先返回代理對象,訪問對象時在發出sql命令?Get()是立即檢索,直接發出sql命令,返回對象 因此abc都是錯誤的,d是正確答案
one-to-one配置的查詢,必須查詢到另一個實體
?
此題考查的是各種連接的效果 因為如 A right join B 即取出B表的所有數據,由on條件關聯的A表數據,有則顯示,沒有則為空;所以B錯;此題目考查的是對Hibernate中迫切連接的簡單應用。Hibernate中的迫切連接是通過fetch關鍵字實現的,fetch關鍵字表明“左邊”對象用于與“右邊”對象關聯的屬性會立即被初始化,但可能會有一些重復的“左邊”對象。在一個Dept部門下有多個Emp員工的情況下,左外連接使用一個部門匹配一個員工的方式返回結果,因此造成結果集中出現重復的Dept部門對象的情況,因此選項B是正確的。A答案中的異常可能在session對象為null的情況下拋出,但題目的假設是session對象是正常開啟的并且未關閉,再者,就算是hql語句沒有查到結果,query.list方法也不會拋出NullPointerException異常,因此選項A是錯誤的。C答案是對迫切連接的原理理解不透徹造成的,迫切連接返回的List會采用“左邊”對象的泛型,而不是Object[],因此選項C是錯誤的。D答案只考慮了簡單的情況,在簡單情況下,即一個部門只有一個員工的情況,題目代碼是沒有問題的。但是考慮到一個Dept部門下有多個Emp員工的情況,題目代碼會返回包含重復Dept對象的List集合,因此,因此選項D是錯誤的。
此題目考查的是Hibernate連接查詢類型的掌握。 inner join [fetch]為內連接的語法,left [outer] join 為左外連接的語法,right [outer] join為左外連接的語法,[inner] join fetch為迫切內連接的語法,所以本題正確選項是C。
?
本題考查的是HQL內連接與迫切內連接的區別。選項A的說法不正確,因為只有迫切內連接才會立即加載連接數據,普通內連接在初始化時set集合并不會立即加載數據。 選項B的說法是正確的,emps集合不會被初始化。選項C的說法也是正確的,第二句是迫切內連接,所以數據會立即加載。選項D是誤導選項。 此題目考查的是Hibernate關系映射的使用。每個人有不同的名字這說明是一對一的關系人和人名不重復,多個人可以是同一個名字為對第一的關系。所以本題正確選項是AC。此題目考查的是對Hibernate中隱式和顯示內連接的簡單應用。在HQL查詢語句中,如果通過對Emp類賦別名“e”,可以通過e.dept.dname的形式訪問dept對象的dname屬性,使用隱式內連接按部門條件查詢員工信息,因此選項B是正確的。另外也可以顯式使用inner join關鍵字內連接e.dept對象,因此選項C也是正確的。A答案中雖然使用了inner join關鍵字,但是連接對象使用不正確,這樣做會導致“could not found the property Dept of Emp”的錯誤,即在Emp類中找不到叫作Dept的屬性。原因是Hibernate是一款基于ORM的解決方案,在HQL語句執行之前已經對表和持久化對象作了映射,Hibernate只知道Emp中有dept屬性,而不知道Dept,因此選項A是錯誤的。B答案是照搬SQL語句的寫法,該寫法用在HQL中會導致將“研發部”這個部門對象與每一個Emp員工對象匹配的結果,總記錄數等于Emp員工的記錄數,因此選項B是錯誤的。
此題目考查的是Hibernate查詢緩存適用的場合,對于經常使用的查詢語句,如果啟用了查詢緩存,當第一次執行查詢語句時,Hibernate會把查詢結果存放在第二緩存中。以后再次執行該查詢語句時,只需從緩存中獲得查詢結果,從而提高查詢性能。所以本題正確選項是AB。
此題目考查的是對緩存的理解,查詢少,變更多時,使用緩存反而會降低性能,所以a、b錯誤。如果按照id查詢,可在id列上增加索引,但如果對每一列都增加索引可能會降低插入和修改性能,因此d錯誤。應選擇c
轉載于:https://www.cnblogs.com/hr1997/p/5855367.html
總結
- 上一篇: LeetCode44 Wildcard
- 下一篇: 2016.9.9