2013-12-08 32 views
1

我有下面的場景,我需要子類能夠指定在MappedSuperClass(s​​)中找到的屬性的實際類型。我使用hibernate作爲提供程序,我不介意使用hibernate特定的註釋來解決此問題。覆蓋JPA MappedSuperClass通用屬性

@MappedSuperclass 
abstract class BaseA{ 
    .... 

    @OneToMany(mappedBy = "baseA") 
    public Set<? extends BaseB> getBaseB(){ 
     ..... 
    } 
} 

@MappedSuperclass 
abstract class BaseB{ 
    ..... 

    @ManyToOne(optional = false) 
    @JoinColumn(name = "basea_id") 
    public BaseA getBaseA(){ 
     ..... 
    } 
} 

@Entity 
class BaseAImpl extends BaseA{ 
    public Set<BaseBImpl> getBaseB(){ 
     ..... 
    } 
} 

@Entity  
class BaseBImpl{ 

    public BaseAImpl getBaseA(){ 
     ..... 
    } 
} 

回答

2

@AssociationOverride在這種情況下將hep你。請參閱documentation(當然,這是一個JPA註釋)。您可以將它與@AttributeOverrides註釋結合使用以覆蓋基本類型。示例(取自示例):

@MappedSuperclass 
public class Employee { 
    ... 
    @ManyToOne 
    protected Address address; 
    ... 
} 

@Entity 
@AssociationOverride(name="address", 
         [email protected](name="ADDR_ID")) 
    // address field mapping overridden to ADDR_ID foreign key 
public class PartTimeEmployee extends Employee { 
    ... 
} 
+0

它不支持覆蓋目標,或者我錯了嗎?你可以給我一個例子嗎? –

+0

添加了一個示例。不,你不能改變targetEntity,因爲你是自動檢測的(你在你的Set中使用泛型)。 –