空不允许,但应为空

问题描述:

我有两个表与一个映射表连接。虽然我收到一个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

您应该为每个关联都有一个单独的连接表,而不是试图对所有关联使用相同的关联表。