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
Java Hibernate抛出;“不允许为空”列;因为在使用@MapsId时,SQL插入中缺少JPA OneToOne关系FK_Java_Hibernate_Jpa_Hibernate Mapping_One To One - Fatal编程技术网

Java Hibernate抛出;“不允许为空”列;因为在使用@MapsId时,SQL插入中缺少JPA OneToOne关系FK

Java Hibernate抛出;“不允许为空”列;因为在使用@MapsId时,SQL插入中缺少JPA OneToOne关系FK,java,hibernate,jpa,hibernate-mapping,one-to-one,Java,Hibernate,Jpa,Hibernate Mapping,One To One,关于我的一对一关系,我得到: “用户ID”列不允许为空;SQL语句: 在客户订单(id、已启用、或已启用id)中插入值(null、、?) 它实际上是null,因为在INSERT查询中不存在。但是,当执行save(customerOrder)时,值USER将填入customerOrder实体 @Getter @超级建筑商 @映射超类 @诺尔格构装师 @EqualsAndHashCode(仅限于xplicitlyincluded=true) 公共抽象类AbstractEntity{ @身份证 @Eq

关于我的一对一关系,我得到: “用户ID”列不允许为空;SQL语句: 在客户订单(id、已启用、或已启用id)中插入值(null、、?)

它实际上是
null
,因为在
INSERT
查询中不存在。但是,当执行
save(customerOrder)
时,值
USER
将填入
customerOrder
实体

@Getter
@超级建筑商
@映射超类
@诺尔格构装师
@EqualsAndHashCode(仅限于xplicitlyincluded=true)
公共抽象类AbstractEntity{
@身份证
@EqualsAndHashCode.Include
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@塞特
@违约
@列(columnDefinition=“布尔默认值‘true’”,null=false)
启用专用布尔值=Boolean.TRUE;
}
@吸气剂
@塞特
@实体
@表(name=“客户订单”)
@超级建筑商
@诺尔格构装师
@EqualsAndHashCode(callSuper=true,onlyExplicitlyIncluded=true)
公共类CustomerOrderEntity扩展了AbstractEntity{
@OneToOne(fetch=FetchType.LAZY)
@MapsId(“id”)
私有用户实体用户;
//其他价值观
}
@资料
@实体
@表(name=“user”)
@超级建筑商
@诺尔格构装师
@EqualsAndHashCode(callSuper=true,onlyExplicitlyIncluded=true)
公共类UserEntity扩展了AbstractEntity{
@归化
@EqualsAndHashCode.Include
@列(长度=28,唯一性=true,可空性=false)
私有字符串uuid;
//其他价值观
}

我希望
customerOrder
能够用填充的数据保存在数据库中。

您的代码完全按照您指定的方式工作

如果您有一个共享键(使用@MapsId),Hibernate将不会为外键使用单独的列。这就是为什么insert查询不包含
user\u id
列的原因

如果是这样,CustomerOrderEntity中的id一方面是自动生成的(如超类中定义的),另一方面映射另一个实体的id。这些要求相互冲突。

使用允许将子表主键用作父表主键的外键

如果启用
hbm2ddl
工具,您将看到
customer\u order
表将不包含
user\u id

但是,由于您之前生成了数据库架构,并且您有一个带有专用
用户id
列的
客户订单
表,因此您需要删除
@MapsId

@OneToOne(fetch = FetchType.LAZY)
private UserEntity user;
这样,
user
关联将使用
user\u id
外键列。

删除
@MapsId(“id”)
注释解决了问题!