我想如果可以更改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表中看到更多字段,
最佳方法是什么
感谢,
答案 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
。