考虑到这样的一些实体:
@MappedSuperclass
public abstract class BaseEntity {
@ManyToOne(optional = true)
@JoinColumn(name = "friend_id")
private AnotherEntity friend;
}
@Entity
public class AnotherEntity {
// ...
}
@Entity
public class ConcreteEntity extends BaseEntity {
//...
}
ConcreteEntity
如何覆盖friend
的映射,以便ConcreteEntity
的实例根本不映射它?
答案 0 :(得分:0)
通常,在实体中,您可以使用@MappedSuperclass
注释覆盖@AssociationOverrides
的关系(元素),但您想要的是强制忽略它。为此,有@Transient
注释,但不指示JPA提供程序忽略重写的属性。所以你有一个单一的可能性:定义一个没有这种关系的SupperMappedClass并在你的类层次结构中使用它:
@MappedSuperclass
public abstract class BaseEntityWithoutFriend {
}
@MappedSuperclass
public abstract class BaseEntityWithFriend {
@ManyToOne(optional = true)
@JoinColumn(name = "friend_id")
private AnotherEntity friend;
}
@Entity
public class ConcreteEntity extends BaseEntityWithoutFriend {//NOTE here that we extend the EntityWithoutFriend
//...
}
注意:根据我使用Hibernate的经验,在您的实体中添加属性@Transient AnotherEntity friend
只会强制映射MappedSupperClass朋友属性,而只忽略ConcreteEntity
中定义的属性。