2013-04-24 4 views
0

두 테이블이 맵핑 테이블과 결합됩니다. 비록 null 제약 문제가 있어요. 아래는 오류 메시지와 두 가지 매핑입니다. 두 가지 모두 manyTomany라고 가정하기 때문에 많은 사람들이 아무 것도 할 수 없다는 것입니다. 어떻게하면 product_id 또는 category_id가 null이 될 수 있습니까?널 (null)은 허용되지 않지만 널 (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

'ImageMapping' 테이블에'PRODUCT_OPTION_ID'라는 이름의 또 다른 열이 없습니까? – dcernahoschi

+0

예, 'PRODUCT_ID' 또는'IMAGE_ID'가 아니라 'PRODUCT_OPTION_ID' 열에 대한 오류입니다. –

+0

방금 ​​지난 밤에 눈치 챘지만 오류는 Product_option_id와 Category_id 사이에서 임의로 전환됩니다. 이것은 테이블에서 H2가 생성 될 때 엔티티가 스냅되는 순서 때문이라고 생각합니다. 제품 옵션이 포함되었습니다. – zmanc

답변

1

모든 연결에 대해 동일한 연결을 사용하는 대신 각 연결에 대해 별도의 연결 테이블을 가져야합니다.