我有以下表格:
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”不能 在桌子上解决了“儿童”。
没有提供更多信息。
答案 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
引用。
这可能不是一种解决方案,更像是一种解决方法,但现在已经足够了。