2014-09-06 59 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參考。

它可能不是一種解決方案,更像是一種解決方法,但暫時足夠了。