【发布时间】:2017-03-07 20:43:43
【问题描述】:
我在我的 XML 持久性文件中定义了一个实体,如下所示。有问题的实体/表有 100 多个字段,但我只需要少数几个。与其使用 fetch="LAZY" 属性标记我不需要的所有字段,我可以将此表的所有列的默认获取策略设置为 LAZY 并且仅将我需要的那些标记为 fetch="EAGER" 吗?
我查看了 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>
【问题讨论】:
-
Fetching 只处理关系而不是实体本身的字段,所以如果你与另一个实体有关系,你可以懒惰地获取它,但我认为你不能对实体字段执行此操作
-
@mibrahim.iti,可以使用
@Basic(fetch = FetchType.LAZY)(或<basic fetch="LAZY>,如问题所示)为JPA 提供延迟获取基本持久字段的提示。话虽如此,没有标准属性可以允许一次覆盖所有实体字段的获取模式。