2017-03-07 70 views
0

我在我的XML持久性文件中定義了一個實體,如下所示。有問題的實體/表有超過100個字段,但我只需要少數幾個字段。我可以使用fetch =「LAZY」屬性來標記所有不需要的字段,但是可以將此表的所有列的默認獲取策略設置爲LAZY,並且只將我需要的那些標記爲fetch =「EAGER」?將實體(XML)的默認獲取策略設置爲LAZY?

我查看了Open JPA文檔here,但我沒有看到任何對此的引用。這在XML實體映射中可能嗎?

<entity class="Users"> 
     <table schema="dbo" name="Users"/> 
     <attributes> 
      <id name="id"> 
       <column name="Id" column-definition="nchar" length="18"/> 
      </id> 
      <basic name="about" fetch="LAZY"> 
       <column name="About" column-definition="nvarchar" length="1000"/> 
      </basic> 
      <basic name="accountId"> 
       <column name="AccountId" column-definition="nchar" length="18"/> 
      </basic> 
      <basic name="alias"> 
       <column name="Alias" column-definition="nvarchar" nullable="false" length="8"/> 
      </basic> 
      <basic name="auditCounter"> 
       <column name="AuditCounter"/> 
      </basic> 
      <basic name="auditPercent"> 
       <column name="AuditPercentc"/> 
      </basic> 
      <basic name="auditTarget"> 
       <column name="Audit"/> 
      </basic> 
      <basic name="CenterId"> 
       <column name="CenterId" column-definition="nchar" length="18"/> 
      </basic> 
     </attributes> 
    </entity> 
+0

獲取正在處理關係而不是實體的字段它自己,所以如果你與另一個實體的關係,你可以取它懶,但我不認爲你可以這樣做實體字段 –

+0

@ mibrahim.iti,可以使用'@Basic(fetch = FetchType.LAZY)'(或'',如問題所示)爲JPA提供懶惰提取基本持久字段的提示。也就是說,沒有標準屬性可以一次覆蓋所有實體字段的獲取模式。 – crizzis

回答

0

這似乎是一個實體圖是你所追求的。

https://docs.oracle.com/javaee/7/tutorial/persistence-entitygraphs001.htm

什麼上面的鏈接暗示是,你可以標記你必須預先抓取的字段,然後使用與您查詢的空載圖。或者,您可以使用提取圖形,明確列出您感興趣的屬性,以便在每個查詢的基礎上控制提取模式。

關於實體的圖形說明書中的混亂的部分是基本字段需要被明確標記爲預先抓取爲好,儘管(只要基於註釋的配置去,至少),用於Basic.fetch屬性的默認值是已經FetchMode.EAGER。我不知道基於XML的配置會有什麼樣的行爲,所以我建議你採用獲取圖形方法,並確保它實際工作。

相關問題