2013-04-24 5 views
0

У меня есть две таблицы, соединяющиеся с таблицей сопоставления. Тем не менее, я получаю проблему с ограничениями на нуль. Ниже приведено сообщение об ошибке и два сопоставления. Поскольку оба являются многими, то мое предположение заключается в том, что многие могут быть ничему, как я могу сделать так, чтобы либо product_id, либо category_id могли быть нулевыми?Null не разрешено, но должно быть нулевым

Сообщение об ошибке

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

У вас нет другого столбца с именем 'PRODUCT_OPTION_ID' в таблице« ImageMapping »? – dcernahoschi

+0

Да, ошибка относится к столбцу 'PRODUCT_OPTION_ID', а не к' PRODUCT_ID' или 'IMAGE_ID'. –

+0

Я только что заметил это вчера вечером, но ошибка переключается случайным образом между Product_option_id и Category_id. Я думаю, что это связано с порядком, в котором объекты привязаны, когда таблицы генерируются в H2. Я включил опции продукта. – zmanc

ответ

1

У вас должна быть отдельная таблица соединений для каждой из ваших ассоциаций вместо того, чтобы пытаться использовать один и тот же для всех.