2011-02-23 42 views
2

我有重寫關聯的麻煩。閱讀的javadoc http://download.oracle.com/javaee/6/api/javax/persistence/CollectionTable.html你可以閱讀「另請參見: ElementCollection,AttributeOverride來,AssociationOverride,列」至極讓我們假設你可以使用它..但我不知道這是如何不工作ElementCollection/MappedSuperclass/AssociationOverride的問題

@MappedSuperclass 
public class AbstractUser { 
[...] 
public String getLastname() { ...} 
    @ElementCollection 
    @CollectionTable([email protected](name="user_id")) 
    @Column(name="nickname") 
    public Set<String> getNicknames() { ... } 

工具

@Entity 
@Table(name="users") 
@Table(name="user_rfcs") 
@AssociationOverride(name = "nicknames", 
     joinTable = @JoinTable(name = "user_nicknames", joinColumns = @JoinColumn(name = "user_id")) 
) 
public class User extends AbstractUser { 
[...] 
} 



@Entity 
@Table(name="user_rfcs") 
@AssociationOverride(name = "nicknames", 
     joinTable = @JoinTable(name = "user_rfc_nicknames", joinColumns = @JoinColumn(name = "user_id")) 
) 
public class UserRFC extends AbstractUser { 
     [...] 
} 

回答

1

@AssociationOverride在「又見」部分中提到,由於以下幾點:

如果嵌入類包含引用其他實體,可以通過AssociationOverride和/或AssociationOverrides註釋來覆蓋與那些引用相對應的列的默認值。

來自對岸,@AssociationOverride的javadoc中說,它只能適用於實體關係,而不是元素的集合:

用於覆蓋映射爲一個實體關係

因此,看起來你不能用@AssociationOverride來做到這一點,你必須用子類中的不同註釋覆蓋getNicknames()方法。

+0

是否可以解決將原始圖像轉換爲嵌入對象的問題? – fphilip 2011-02-23 18:11:50

+0

@fphilip:不,@ @OpenOverride'完全不適用於'@ CollectionTable'。 – axtavt 2011-02-23 18:17:51