2014-03-31 72 views
0

鑑於一些實體是這樣的:子類如何覆蓋繼承關聯的映射,以便它被忽略(未爲子類實體映射)?

@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

通常在一個實體中,您可以使用@AssociationOverrides批註覆蓋@MappedSuperclass中某個關係(的元素),但是您希望強制忽略它。爲此,有@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 friend屬性,僅忽略在ConcreteEntity中定義的屬性。