Java 用@Transient注释实体
我有一个用@Entity注释的类,因此存储在数据库中。现在我想做的是扩展它,但是子类根本不应该被持久化: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(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对它进行注释。但是如果您的代码试图持久化它(以某种方式),则会引发异常。