当我尝试在JPA中实现JOINED继承时,Eclipse显示错误

时间:2014-09-06 18:00:27

标签: java sql eclipse oracle jpa

我有以下表格:

CREATE TABLE Parent (
    id NUMBER PRIMARY KEY,
    column1 VARCHAR(100)
);

CREATE TABLE Child (
    id NUMBER PRIMARY KEY REFERENCES Parent(id),
    --other columns
);

然后我有这个类的层次来映射这两个表之间的连接继承。

@MappedSuperClass
class Base implements Serializable {

    @Column(name="column1")
    protected String column1;

}

@Entity
@Inheritance(strategy.InheritanceType.JOINED)
@DiscriminatorColumn(name="type")
@Table(name="parent")
class Parent extends Base {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

}

@Entity
@DiscriminatorValue("val")
@Table(name="child")
@PrimaryKeyJoinColumn(name="id")
class Child extends Parent {

    // other columns
    ...
}

Eclipse在最终类中显示错误,告诉我它无法解析column1,它不应该解析。根据我对连接继承策略的理解,预计不会有该列。我用谷歌搜索了所有内容,然后用这本书做了一切,但没有用。

我想尝试运行测试 - 也许这是Eclipse的一个小故障 - 但不幸的是我已经有超过50个表可以使用,每个表与至少十几个表有关系 - 这个依赖于信息从另外5个表中,每个表现在都有自己的问题 - 所以我希望能找到一些关于我可能出错的快速指示。

非常感谢您提前。 :)

更新

错误消息:

  

在隐含属性覆盖“column1”中,列“COLUMN1”不能   在桌子上解决了“儿童”。

没有提供更多信息。

1 个答案:

答案 0 :(得分:0)

我弄清楚这段代码有什么问题。

课程Child继承了Parent的所有内容,包括Base类及其列定义 - 因为@MappedSuperClass适用于所有继承类。

我尝试了一种不同的,虽然多余的方法来解决此问题,方法是将列分组到@Embeddable并将其嵌入Parent类中。

@Embeddable
class Base implements Serializable {

    @Column(name="column1")
    protected String column1;

}

@Entity
@Inheritance(strategy.InheritanceType.JOINED)
@DiscriminatorColumn(name="type")
@Table(name="parent")
class Parent {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @Embdedded
    private Base base;

}

@Entity
@DiscriminatorValue("val")
@Table(name="child")
@PrimaryKeyJoinColumn(name="id")
class Child extends Parent {

    // other columns
    ...
}

我说多余,因为每次我做一个新的父母 - 而在我的情况下,有很多 - 我将不得不添加Base引用。

这可能不是一种解决方案,更像是一种解决方法,但现在已经足够了。