2013-04-24 79 views
0

我有兩個表與一個映射表連接。雖然我收到一個null約束問題。以下是錯誤消息和兩個映射。既然這兩者都是很多的,我的假設是許多人可能都沒有,我怎麼能做到這一點,所以product_id或category_id可以爲空?空不允許,但應爲空

錯誤消息

Caused by: org.h2.jdbc.JdbcBatchUpdateException: NULL not allowed for column "PRODUCT_OPTION_ID"; SQL statement: 
insert into ImageMapping (product_id, image_id) values (?, ?) [23502-168] 

分類

@JoinTable(
     name = "ImageMapping", 
     joinColumns = @JoinColumn(name = "category_id"), 
     inverseJoinColumns = @JoinColumn(name = "image_id") 
) 
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) 
private Set<Image> categoryImageId; 

產品

@JoinTable(
     name="ImageMapping", 
     joinColumns = @JoinColumn(name = "product_id"), 
     inverseJoinColumns = @JoinColumn(name = "image_id") 
) 
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) 
private Set<Image> productImageGroup; 

產品選項

@JoinTable(
     name="ImageMapping", 
     joinColumns = @JoinColumn(name = "product_option_id"), 
     inverseJoinColumns = @JoinColumn(name = "image_id") 
) 
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
private Set<Image> productOptionImageGroup; 
+1

您確定您在'ImageMapping'表中沒有另一個名爲'PRODUCT_OPTION_ID'的列嗎? – dcernahoschi 2013-04-24 05:02:49

+0

是的,錯誤與「PRODUCT_OPTION_ID」列有關,而與「PRODUCT_ID」或「IMAGE_ID」無關。 – 2013-04-24 05:14:44

+0

我剛纔注意到了這個昨晚,但錯誤在Product_option_id和Category_id之間隨機切換。我認爲這是由於在H2中生成表格時實體被捕獲的順序。我包括產品選項加入。 – zmanc 2013-04-24 11:41:08

回答

1

您應該爲每個關聯都有一個單獨的連接表,而不是試圖對所有關聯使用相同的關聯表。