子类如何覆盖继承关联的映射,以便忽略它(不为子类实体映射)?

时间:2014-03-31 13:07:16

标签: java hibernate jpa orm

考虑到这样的一些实体:

@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的实例根本不映射它?

1 个答案:

答案 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中定义的属性。