2012-07-16 101 views
2

我對hibernate註釋映射有相當大的問題。我的繼承人圖:休眠註釋與複合外鍵一對多

diagram http://s13.postimage.org/vdye6yc8n/image.jpg

至於映射對象,一些很簡單的原因1,...,N爲:
TASK_DEF -> REPORT_DATA
REPORT_DATA -> REPORT_DATA_COLUMN
REPORT_DATA -> REPORT_DATA_VALUE
吧?

現在的問題是,當我試圖將REPORT_DATA_VALUE集合映射到REPORT_DATA_COLUMN。我試過這種方式:

@OneToMany(fetch = FetchType.LAZY) 
@ForeignKey(name = "FK_REPORT_DATA_VALUE_REPORT_DA", inverseName = "PK_REPORT_DATA_COLUMN") 
@JoinTable(name = "REPORT_DATA_VALUE", joinColumns = { 
     @JoinColumn(name = "REPORT_DATA_ID"), 
     @JoinColumn(name = "COLUMN_NM") 
}, inverseJoinColumns = { 
     @JoinColumn(name = "REPORT_DATA_ID"), 
     @JoinColumn(name = "COLUMN_NM") 
})  
List<ReportDataValue> reportDataValueList; 

但hibernate選擇錯誤的標識,因此無法執行查詢。有人可以幫助我嗎?

+0

在您的問題中包括該圖,並粘貼異常的完整堆棧跟蹤。 – 2012-07-16 12:47:33

+0

對不起,圖更新了! – kamil 2012-07-16 13:14:40

回答

2

代碼存在問題。試試這個:

@OneToMany(fetch = FetchType.LAZY) 
@JoinTable(name = "REPORT_DATA_VALUE", joinColumns = { 
    @JoinColumn(name = "REPORT_DATA_ID"), 
}, inverseJoinColumns = { 
    @JoinColumn(name = "COLUMN_NM") 
})  
List<ReportDataValue> reportDataValueList; 

順便說一句,如果我是你,我不會對一對多創建一個表。我會這樣做:

public class A{ 
    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="B_ID") 
    B b; 
} 

public class B{ 
    @OneToMany(mappedBy="b",fetch=FetchType.EAGER) 
    Set<A> as; 
}