【问题标题】:Does @AttributeOverride annotation breaks polymorphism?@AttributeOverride 注释会破坏多态性吗?
【发布时间】:2011-01-15 12:51:19
【问题描述】:

我需要 JPA 中的继承方面的帮助

我会用一个例子来说明我的问题:

假设我们有一个 Animal 类和一个 Cat 类。

@Entity
@Table(name = "animal")
@DiscriminatorColumn(name="animal_type",columnDefinition="Integer",length=11)
public class Animal implements Serializable{
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column(name = "animal_id", nullable = false)
    private Long id;

    ...

}

@Entity
@Table(name = "cat")
@DiscriminatorValue("1")
@AttributeOverride(name="id",column=@Column(name="cat_id"))
public class Cat extends Animal {

    ...

}

如示例所示,我想为 cat 表中的 id 列使用不同的名称

但是当我尝试执行询问所有 Animal 实例的多态查询时,我得到一个错误。就像查询无法根据动物实例处理不同的字段名称一样。

我这样做对吗? 提前致谢。

【问题讨论】:

  • 你找到解决办法了吗?

标签: inheritance jpa polymorphism overriding


【解决方案1】:

您可以尝试使用此注解。我举个例子

@PrimaryKeyJoinColumn(name="cat_id")
public class Cat extends Animal

【讨论】:

    【解决方案2】:

    不,我想我不是。

    首先我忘记了@Inheritance 注释:

    @Inheritance(strategy=InheritanceType.JOINED)
    

    无论如何,我看到我可以覆盖其余字段,但不能覆盖 ID。或者问题可能是我在查询中使用了 id 而不是其他字段。

    【讨论】:

      【解决方案3】:

      你必须使用注解@PrimaryKeyJoinColumn

      【讨论】:

        猜你喜欢
        • 2011-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多