【问题标题】:Problems with ElementCollection / MappedSuperclass / AssociationOverrideElementCollection / MappedSuperclass / AssociationOverride 的问题
【发布时间】:2011-02-23 17:32:23
【问题描述】:

我无法覆盖关联。阅读 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  {
       [...]
}

【问题讨论】:

    标签: java hibernate jpa-2.0


    【解决方案1】:

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

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

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

    用于覆盖实体关系的映射

    因此,您似乎无法使用 @AssociationOverride 来做到这一点,您必须在子类中使用不同的注释覆盖 getNicknames() 方法。

    【讨论】:

    • 能否解决将基元转换为嵌入对象的问题?
    • @fphilip: 不,@AssociationOverride 根本不适用于@CollectionTable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多