2015-11-03 54 views
0

我有一個基類,它有四個字段a,b,c & d和兩個擴展它的子類。Hibernate註釋排除基類中的字段

我試圖確保SubOne不會持續字段d和SubTwo不會持續字段c。

下面的xml映射完美地工作。

這可能使用註釋嗎?

(休眠V3.2.4,JPA 1.0)

public class Base { 
    private String a; 
    private String b; 
    private String c; 
    private String d; 
} 

public class SubOne extends Base { 
    private int id; 
} 

public class SubTwo extends Base { 
    private int id; 
    private String e; 
} 

映射:

<class name="SubOne" table="SubOne"> 
    <id name="id" column="Id"> 
     <generator class="identity"/> 
    </id> 
    <property name="a" column="a" /> 
    <property name="b" column="b" /> 
    <property name="c" column="c" /> 
</class> 

<class name="SubTwo" table="SubTwo"> 
    <id name="id" column="Id"> 
     <generator class="identity"/> 
    </id> 
    <property name="a" column="a" /> 
    <property name="b" column="b" /> 
    <property name="d" column="d" /> 
    <property name="e" column="e" /> 
</class> 

子一類:

@Entity 
@Table(name="SubOne") 
public class SubOne extends Base implements Serializable {  

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

@Override 
public String getA() { 
    return super.getA(); 
} 

@Override 
public String getB() { 
    return super.getB(); 
} 

@Override 
public String getC() { 
    return super.getC(); 
} 

} 

回答

0

是你能做到這一點,但一個尷尬方式:

覆蓋getter方法:

  • GETD在子一
  • GETC子二是

註釋這兩種方法爲@Transient

+0

感謝您的幫助@orid。我試過了,但它不起作用,這是你的意思?我把我的代碼放在 – user1810292

+0

以上謝謝!我明白了,上面似乎有效。最後一個問題 - 我怎樣才能做到這一點,而不是方法? – user1810292

+0

請忽略,陰影字段是一個壞主意。 –