ElementCollection / MappedSuperclass / AssociationOverride的问题

时间:2011-02-23 17:32:24

标签: java hibernate jpa-2.0

我有覆盖关联的麻烦。阅读javadoc http://download.oracle.com/javaee/6/api/javax/persistence/CollectionTable.html你可以阅读“另请参阅: ElementCollection,AttributeOverride,AssociationOverride,Column“这给我们假设你可以使用它......但我不知道这是怎么回事

@MappedSuperclass
public class AbstractUser {
 [...]
public String getLastname() { ...}
    @ElementCollection
    @CollectionTable(joinColumns=@JoinColumn(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 个答案:

答案 0 :(得分:1)

@AssociationOverride在“另请参阅”部分中提及,原因如下:

  

如果embeddable类包含对其他实体的引用,则可以通过AssociationOverride和/或AssociationOverrides注释覆盖与这些引用对应的列的默认值。

另一方面,@AssociationOverride的javadoc说它只能应用于实体关系,而不是基元集合:

  

用于覆盖实体关系的映射

因此,您似乎无法使用@AssociationOverride执行此操作,并且您必须在子类中使用不同的注释覆盖getNicknames()方法。