【问题标题】:Transient fields by default默认情况下的瞬态字段
【发布时间】:2014-10-29 15:58:52
【问题描述】:

如果可能的话,我想改变 JPA 的默认行为,我想将所有字段的默认值设为“瞬态”

我有一个可嵌入的

<embeddable class="beans.Address" metadata-complete="false" >

    <attributes >

        <basic name="id">
            <column name="address_id"></column>
        </basic>
        <basic name="description">
            <column name="address_description"></column>
        </basic>
        <transient name="city"></transient>
    </attributes>
</embeddable> 


<entity class="beans.Membership" >
    <table name="cc_membership">
    </table>
    <!--  -->
    <attributes>
        <id name="id">
            <column name="id"/>
            <generated-value generator="sq_cc_membership" strategy="SEQUENCE"/>
        </id>

        <!--more properties-->

        <basic name="shortName">
            <column name="shortName"/>
        </basic>

        <version name="version"></version>

        <many-to-one name="physicalPerson">
            <join-column name="physical_person_id"></join-column>
        </many-to-one>

        <embedded name="address">
        </embedded>
    </attributes>
</entity>

“beans.Address”类有更多属性,但是当我要添加更多属性时,我不想在我的 cc_membership 表中看到更多字段,

最好的方法是什么

谢谢,

【问题讨论】:

  • 这些类在不同的 Osgi Bundles 中

标签: hibernate jpa eclipselink


【解决方案1】:

这不能在标准 JPA 中完成,因此您将求助于提供程序特定的功能。

Eclipselink-Orm.xml 有一个 exclude-default-mappings 标记,您可以将其与 xml-mapping-metadata-complete orm.xml 标记一起使用,如下所述: https://wiki.eclipse.org/EclipseLink/Examples/JPA/EclipseLink-ORM.XML#.3Cexclude-default-mappings.2F.3E

不知道Hibernate有没有类似的东西。

【讨论】:

  • 我正在使用 Eclipselink
【解决方案2】:

我不确定您是否可以(或者即使您想要)更改默认的 JPA 行为,但要做到这一点,您可以创建一个包含所有新字段的对象,将整个对象标记为瞬态。像这样的

public class TransientFields {
    private String field1;
    private String field2;
    ...
    // getters and setters
}

Address 看起来像这样

@Embeddable
public class Address {
    // persistent fields
    ...
    @Transient
    private TransientFields transientFields;
    // getters and setters
}

然后,您可以更改TransientFields 而不会影响数据库。

【讨论】:

  • 嗨 Predrag,我有一个 OSGI 项目,地址在一个 Osgi Bundle 中,而 Membership 在另一个 Osgi Bundle 中。如果一个 Osgi Bundle 可以修改.. 更改不应影响另一个。
  • @jrey.py 抱歉,我没有太注意这一点,因为我认为可以以类似的方式进行相同的更改。
猜你喜欢
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2012-11-24
  • 1970-01-01
相关资源
最近更新 更多