Java 即使使用cascade=CascadeType.ALL,在POST/PUT/DELETE方法时也会出现约束hibernate异常

Java 即使使用cascade=CascadeType.ALL,在POST/PUT/DELETE方法时也会出现约束hibernate异常,java,spring,hibernate,api,jpa,Java,Spring,Hibernate,Api,Jpa,我正在尝试使用POST Rest API向h2内存数据库添加一个新对象。 我得到了这个错误:嵌套异常是org.hibernate.exception.ConstraintViolationException 在我的费用实体中,我放置了@ManyToOne(cascade=CascadeType.ALL),所以在创建费用对象之前不应该创建类别对象,不是吗 提前谢谢。 这是我的全部财产: 公费{ @Id @GeneratedValue(strategy = GenerationType.IDENTI

我正在尝试使用POST Rest API向h2内存数据库添加一个新对象。 我得到了这个错误:嵌套异常是org.hibernate.exception.ConstraintViolationException

在我的费用实体中,我放置了@ManyToOne(cascade=CascadeType.ALL),所以在创建费用对象之前不应该创建类别对象,不是吗

提前谢谢。 这是我的全部财产: 公费{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
private String description;
@Column(name = "expense_date")
private Instant expenseDate;
@Column(name = "location")
private String location;
@ManyToOne(cascade={CascadeType.ALL})
@Nullable
@JoinColumn(name = "category_id", referencedColumnName = "id", nullable = false)
private Category category;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "user_id", referencedColumnName = "id", nullable = false)
@Nullable
@JsonIgnore
private User user;}
类别类 公共类类别{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@NonNull
private String name;}
用户类别: 公共类用户{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
private String name;
private String email;}

当我从@JoinColumn中删除nullable=false时,问题就解决了。因为在Post方法中,我没有提供id,因为它是生成的,所以理论上可以为null。您对费用类别的定义有错误。
注释@Nullable-允许空值,Nullable=false-不允许。

如何创建表?我想你必须为空user_id和category_id,我首先使用我放在类路径中的sql文件创建表。之后,我使用spring数据在这里发布它?插入到用户(姓名、电子邮件)值中('Siamak','Codeengine11@gmail.com“)插入用户(姓名、电子邮件)值('John','John@john.com“)插入用户(姓名、电子邮件)值('Adam','adam@adam.com“)插入类别(名称)值(“旅行”)插入类别(名称)值(“汽车贷款”)插入类别(名称)值(“旅行”)插入费用(说明,费用日期,地点,类别id,用户id)值('2019-06-16T17:00:00.000Z','2019-06-16T17:00.000Z','巴黎',1,1)插入费用(说明,费用日期,地点,类别id,用户id)值('Ford Mustang Payment','2019-06-15T15:00:00.000Z','纽约',2)插入费用(描述、费用、日期、地点、类别、用户id)值(“带家人的大峡谷之旅”、“2019-06-15T15:00:00.000Z”、“洛杉矶”,3,1)我刚才在下面的评论中对此进行了评论;)