2013-11-25 57 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