【问题标题】:Set default fetch strategy to LAZY for entity ( XML)?将实体(XML)的默认获取策略设置为 LAZY?
【发布时间】: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)(或&lt;basic fetch="LAZY&gt;,如问题所示)为JPA 提供延迟获取基本持久字段的提示。话虽如此,没有标准属性可以允许一次覆盖所有实体字段的获取模式。

标签: java jpa openjpa


【解决方案1】:

您所追求的似乎是实体图。

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

上面的链接意味着您可以标记需要急切获取的字段,然后在查询中使用空负载图。

或者,您可以使用提取图,明确列出您感兴趣的属性,以根据每个查询控制提取模式。

关于实体图规范的令人困惑的部分是基本字段也需要显式标记为急切获取,尽管(至少就基于注释的配置而言),Basic.fetch 属性的默认值已经是FetchMode.EAGER。我不知道基于 XML 的配置会有什么行为,所以我建议您使用 fetch graph 方法并确保它确实有效。

【讨论】:

    猜你喜欢
    • 2019-12-26
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2019-08-25
    • 2010-12-02
    相关资源
    最近更新 更多