默认情况下为瞬态字段

时间:2014-10-29 15:58:53

标签: hibernate jpa eclipselink

我想如果可以更改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”类有更多属性,但是当我要添加更多属性时,我不想在My cc_membership表中看到更多字段,

最佳方法是什么

感谢,

2 个答案:

答案 0 :(得分: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是否有类似的东西。

答案 1 :(得分:0)

我不确定你是否可以(或者即使你想要)改变默认的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