2013-11-25 74 views
0

我有一個用@Entity註解的類,因此存儲在數據庫中。現在我要做的就是把它擴大,但子類不應該在所有的堅持:用@Transient註釋實體

@Entity(name = "A") 
public abstract class A { 

    private String field; 

    public String getField() { 
     return field; 
    } 

    public abstract void print(); 
} 

public class B extends A { 

    @Override 
    public void print() { 
     System.out.println(getField()); 
    } 
} 

爲什麼我不能標註B帶@Transient以防止在數據庫中創建額外的不必要的項目?我可能會錯過重要的事情嗎?

+0

@Transient是用來控制字段將會轉向/從XML和無關與JPA這就是爲什麼它沒有效果的JAX-B註解。 – Pace

+0

@Pace'@ Transient'是一個JPA註釋(它也在包持久化中),用於不持久的字段:http://docs.oracle.com/javaee/5/api/javax/persistence/ Transient.html –

+0

你是對的。我在腦子裏完全倒退了。抱歉。 – Pace

回答

1

爲了避免的B情況下得到堅持,你不需要用@Transient註釋它(這是用於標記字段/屬性是不持久的),而是避免@Entity註釋,或乾脆不列表在你的persistence.xml文件中。

除此之外,您還必須確保你的代碼永遠不會試圖堅持這樣的類型,否則會拋出異常。

+0

只是爲了澄清:如果我然後實例化B並堅持數據,它不會被存儲在數據庫中(如果它有任何區別,我使用Hibernate)? – hoefling

+0

不,它不會被保留,因爲您沒有使用@Entity對它進行註釋。但是如果你的代碼試圖堅持它(以某種方式),將會拋出異常。 –

+0

明白了!非常感謝您的解釋! – hoefling