gpt4 book ai didi

mysql - 使用spring boot Jpa插入mysql不工作

转载 作者:行者123 更新时间:2023-11-30 21:25:20 25 4
gpt4 key购买 nike

我试图在 spring boot 中使用 JpaRepository 将数据保存到 Mysql 数据库中,但是我不断收到以下错误,不确定哪里做错了:

 java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails

我的模型类看起来像:

@Entity
@Table(name = "cart")
public class Cart {

@Id
@Column(name = "id", unique = true, nullable = false)
private String id;
@Column(name = "user_id")
private int userId;

@OneToMany(fetch = FetchType.LAZY, targetEntity = User.class)
@JoinColumn(name="user_id", referencedColumnName = "id", insertable = false, updatable = false)
private List<User> user;

public List<User> getUser() {
return user;
}

public void setUser(List<User> user) {
this.user = user;
}

public Cart() {
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public int getUserId() {
return userId;
}

public void setUserId(int userId) {
this.userId = userId;
}
}


@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false, columnDefinition = "integer")
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "email")
private String email;
@Column(name = "phone")
private String phone;

public User() {
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getPhone() {
return phone;
}

public void setPhone(String phone) {
this.phone = phone;
}
}

我的仓库:

    @Repository
public interface CartRepository extends JpaRepository<Cart, String> {


}

我做错了什么,是否有更好的方法来持久化数据?

更新:这是 postman 使用的数据:

{
"id": "5beeb524-20fc-11ea-978f-2e728ce88125",
"user_id": 1
}

但是当我记录上面的数据时,它返回上面的 id 但 user_id 总是返回 0

购物车的 ID 不是自动生成的。

最佳答案

为唯一 ID 添加一个生成器。例如,对于一个字符串,生成器可能是这样的:

@Id
@GeneratedValue(generator = "uuid")
@Column(name = "id", unique = true, nullable = false)
private String id;

相应地为您的唯一 ID 找到合适的类型和生成器。希望对您有所帮助。

编辑:看到堆栈跟踪后,这看起来也有些帮助:could not execute statement SQL constraint [id] nested exception is org.hibernate.exception.ConstraintViolationException

这个问题似乎也是因为 cart.user_id 是引用用户类中的 user.id 的外键,这违反了一些约束。

将以下内容添加到用户模型类:

@OneToMany(mappedBy = "user_id", cascade = CascadeType.ALL)
private List<User> users;

并将以下内容添加到购物车模型类:

@ManyToOne
@JoinColumn
private int user_id;

关于mysql - 使用spring boot Jpa插入mysql不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59379606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com