Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 不允许为Null,但应为Null_Mysql_Hibernate_Jpa_H2 - Fatal编程技术网

Mysql 不允许为Null,但应为Null

Mysql 不允许为Null,但应为Null,mysql,hibernate,jpa,h2,Mysql,Hibernate,Jpa,H2,我有两个表与一个映射表连接。但我遇到了一个空约束问题。下面是错误消息和两个映射。既然两者都是很多的,我的假设是很多可以是没有的,那么我如何使产品id或类别id都可以为空呢 错误消息 Caused by: org.h2.jdbc.JdbcBatchUpdateException: NULL not allowed for column "PRODUCT_OPTION_ID"; SQL statement: insert into ImageMapping (product_id, image_id

我有两个表与一个映射表连接。但我遇到了一个空约束问题。下面是错误消息和两个映射。既然两者都是很多的,我的假设是很多可以是没有的,那么我如何使产品id或类别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=“category\u id”),
inverseJoinColumns=@JoinColumn(name=“image\u id”)
)
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.PERSIST)
私有集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_id”),
inverseJoinColumns=@JoinColumn(name=“image\u id”)
)
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.PERSIST)
私有集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;
@JoinTable(
name=“ImageMapping”,
joinColumns=@JoinColumn(name=“product\u option\u id”),
inverseJoinColumns=@JoinColumn(name=“image\u id”)
)
@OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
私有集productOptionImageGroup;

对于每个关联,您应该有一个单独的联接表,而不是尝试对所有关联使用相同的联接表

您确定在
ImageMapping
表中没有另一列名为
PRODUCT\u OPTION\u ID
?是的,错误是关于
PRODUCT\u OPTION\u ID
列,而不是关于
PRODUCT\u ID
IMAGE\u ID
。我昨晚才注意到这一点,但是错误会在Product_option_id和Category_id之间随机切换。我认为这是由于在H2中生成表时实体被抢占的顺序造成的。我包括了产品选项联接。为我们展示有关表的
CREATE TABLE
。您的每个关联都应该有一个单独的联接表,而不是尝试对所有关联使用相同的联接表。