2014-09-06 44 views
0

我有表的层次结构如下JOINED继承显示错误。的Eclipse,当我尝试实现JPA

@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张桌子的信息,每个人都有自己的问题 - 所以我希望能够快速指出我可能会出错的地方。

非常感谢您提前。 :)

UPDATE

错误消息:

在隐含属性覆盖 “列1”,列 “COLUMN1” 不能 解决表 “孩子”。

没有提供更多信息。

+0

请显示确切的完整的错误信息。 – OldProgrammer 2014-09-06 18:15:47

+0

问题已更新。 – mJr 2014-09-06 18:22:02

+0

你有没有在子表中的column1?该消息表示它无法在子项中找到column1。 – user3487063 2014-09-06 18:45:02

回答

0

我想出了这段代码有什么问题。

ChildParent继承一切,包括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参考。

它可能不是一种解决方案,更像是一种解决方法,但暂时足够了。