2012-03-09 65 views
3

我有类AttributeOverride来设置空值映射的领域

@Embeddable 
public class MyClass implements Serializable 
{ 
    private String field1; 
    private String field2; 
    private String field3; 

// getters, setters 
} 

,我已经映射类

public class MappedClass implements Serializable 
{ 
    @Embedded 
    @AttributeOverrides(
     { 
     @AttributeOverride(name = "field1", column = @Column(name = "column1")), 
     @AttributeOverride(name = "field2", column = @Column(name = "column2")), 
     @AttributeOverride(name = "field3", column = @Column(name = "column3")) 
     }) 
    private MyClass myClassField1; 

    @Embedded 
    @AttributeOverrides(
     { 
     @AttributeOverride(name = "field1", column = @Column(name = "column1")), 
     @AttributeOverride(name = "field2", column = @Column(name = "column2")), 
     }) 
    private MyClass myClassField2; 

// setters, getters 

} 

我想,在myClassField2“filed3”是“空”,becouse“字段3”不是招数据库映射。 我能做什么? 'field3'栏中的'field3'的JPA搜索值

在Hibernate中,所有通过正常!

<component name="myClassField1" class="MappedClass"> 
      <property name="field1" type="string" column="column1" /> 
      <property name="field2" type="string" column="column2" /> 
      <property name="field3" type="string" column="column3" /> 
    <component/> 

    <component name="myClassField2" class="MappedClass"> 
      <property name="field1" type="string" column="column1" /> 
      <property name="field2" type="string" column="column2" /> 
    <component/> 

但我需要这在JPA

回答

4

你想要做什么是不可能的。其他领域是持久的,或者是暂时的。它有时不是一个,有时是另一个。

考虑定义一个只有两个字段的MyClass1,以及一个MyClass2扩展MyClass1并添加第三个字段。第一个用于myClassField2,第二个用于myClassField1

请注意,在你的例子中,你已经映射了column1和column2两次,这也是不正确的。