【问题标题】:Getting contraint hibernate exception when POST/PUT/DELETE Method even with using cascade=CascadeType.ALL即使使用 cascade=CascadeType.ALL,POST/PUT/DELETE 方法也会出现约束休眠异常
【发布时间】:2019-12-15 11:36:03
【问题描述】:

我正在尝试使用 POST Rest API 向 h2-memory 数据库添加一个新对象。 我收到了这个错误:嵌套异常是 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;}

【问题讨论】:

  • 你如何创建你的表?我认为你必须为 null 的 user_id 和 category_id
  • 我首先使用放入 classPath 的 sql 文件创建表。之后我使用弹簧数据到 CRUD
  • 你能把那个贴在这里吗?
  • 插入用户(姓名,电子邮件)值('Siamak','Codeengine11@gmail.com')插入用户(姓名,电子邮件)值('John','John@john.com ')插入用户(姓名,电子邮件)值('Adam','adam@adam.com')插入类别(名称)值('Travel')插入类别(名称)值('Auto Loan')
  • 插入类别(名称)值('旅行')插入费用(描述,费用_日期,位置,类别ID,用户ID)值('纽约商务旅行','2019-06-16T17: 00:00.000Z','Paris',1,1) 插入费用(description,expense_date,location,category_id,user_id)值('Ford Mustang Payment','2019-06-15T15:00:00.000Z',' New York',2,2) 插入费用(description,expense_date,location,category_id,user_id) values('Grand Canyon Trip With Family','2019-06-15T15:00:00.000Z','Los Angeles', 3,1)

标签: java spring hibernate api jpa


【解决方案1】:

您对 Expense 类的定义有误。 注释 @Nullable - 允许 NULL 值,并且 nullable = false - 不允许。

【讨论】:

  • 我刚刚在下面的评论中评论了这一点;)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多