2012-01-11 52 views
0
禁用繼承

我的班級「Resource_Image」是資源的一個子類,萬事都如預期,但在我的數據庫包含列「結構」兩個表。爲什麼? 在Resource_Image實例上使用setRs是爲超類設置Resource_Structure,但爲什麼我在表「res_images」上也有「STRUCTURE」列,這沒有意義? 請參閱底部的代碼。有任何想法嗎?JPA - 在子類

@Entity 
@Table(name="res") 
@Inheritance(strategy=InheritanceType.JOINED) 
public class Resource { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "ID") 
    private Long id; 

    @JoinColumn(name = "STRUCTURE",nullable=false) 
    private Resource_Structure rs; 

    //getter and setter for rs 
    public final void setRs(Resource_Structure rs) { 
     this.rs = rs; 
    } 
    //... 
} 

@Entity 
@Table(name="res_images") 
public class Resource_Image extends Resource 
{ 
    @Column(name = "WIDTH",nullable=false) 
    private int width; 

    @Column(name = "HEIGHT",nullable=false) 
    private int height; 

    //NO getter and setter for rs 
} 

回答

0

這些是你的完整的類文件嗎?

從代碼,結構只應在res表中定義。你使用自動DDL生成並看到它在res_images中創建?您是否與使用該列的Resource_Image有任何關係?當你堅持並反對時,它是否嘗試插入到該列中?

+0

這只是涉及的屬性/類的摘錄。 STRUCTURE和setters/getters只在res表中定義。但它顯示在數據庫res和res_image(是的,我使用自動DLL生成)。保留後,此列在res_image表中爲null,並在res表中正確設置。所以res_image中的STRUCTURE-column是完全無用的,但是可用。在我看來,該列是由於可能覆蓋該屬性而創建的,有沒有辦法告訴JPA「這個屬性只存在於超類中,不能被覆蓋」? – 2012-01-23 10:53:35