当使用级联=CascadeType.ALL时,当POST/PUT/DELETE方法时获得休眠异常



我正在尝试使用 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;}

您在定义费用类时有误。 注释@Nullable - 允许 NULL 值,可为空 = false - 不允许。

当我从@JoinColumn中删除 nullable=false 时解决了问题。 因为在 Post 方法中,我没有提供 id,因为它是生成的,所以它在理论上可以为空

最新更新