Java 用@Transient注释实体

Java 用@Transient注释实体,java,inheritance,jpa,persistence,Java,Inheritance,Jpa,Persistence,我有一个用@Entity注释的类,因此存储在数据库中。现在我想做的是扩展它,但是子类根本不应该被持久化: @Entity(name = "A") public abstract class A { private String field; public String getField() { return field; } public abstract void print(); } public class B extends A {

我有一个用@Entity注释的类,因此存储在数据库中。现在我想做的是扩展它,但是子类根本不应该被持久化:

@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());
    }
}

为什么我不能用@Transient注释B以防止在数据库中创建其他不必要的条目?我是否遗漏了一些重要的内容?

为了避免
B
的实例被持久化,您不需要使用
@Transient
对其进行注释(用于标记非持久化的字段/属性),而是避免在persistence.xml文件中使用
@Entity
对其进行注释,或者干脆不列出


此外,您必须确保您的代码永远不会试图持久化这种类型,否则将引发异常。

@Transient是一种JAX-B注释,用于控制哪些字段从XML转换到XML,与JPA无关,这就是为什么它没有效果。@Pace
@Transient
是一种JPA注释(它也在包persistence中)并用于非持久性字段:你是对的。我的想法完全颠倒过来了。抱歉。只是澄清一下:如果我实例化B并持久化数据,它不会存储在数据库中吗(如果有什么不同的话,我使用Hibernate)?不,它不会被持久化,因为您没有用@Entity对它进行注释。但是如果您的代码试图持久化它(以某种方式),则会引发异常。