spring-boot - 在第二次保存时,先前保存的数据的外键在 Spring Boot 中更新为 null
问题描述
下面开发一个购物车应用程序是我的实体类......
当我第一次保存用户实体时,当使用相同的请求再次保存用户时,之前保存的外键变为空,我正在使用相同的请求,因为对于同一个用户,对于同一个购物车,购物车产品必须更新在多行中。
@Entity
public class CartProduct implements Serializable {
/**
* serialVersionUID.
*/
private static final long serialVersionUID = 5846027470952949766L;
/**
* cartProdcutId.
*/
@Id
@GeneratedValue
@Column(name = "CART_PRODUCT_ID")
private Integer cartProdcutId;
/**
* product.
*/
@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;
/**
* cart.
*/
@ManyToOne
@JoinColumn(name = "CART_ID")
private Cart cart;
/**
* quantity.
*/
@Min(value = 0, message = "Product Quantity should not be negative")
@Column(name = "QUANTITY")
private Integer quantity;
}
二等
@Entity
public class Cart {
/**
* cartId.
*/
@Id
@GeneratedValue
@Column(name = "CART_ID")
Integer cartId;
/**
* cartProducts.
*/
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "CART_ID")
Set<CartProduct> cartProducts = new HashSet<CartProduct>();
}
保存用户类
@Entity
public class User {
/**
* userId.
*/
@Id
@GeneratedValue
@Column(name = "USER_ID")
Integer userId;
/**
* userName.
*/
@Column(name = "USER_NAME")
String userName;
/**
* cart.
*/
@OneToOne(cascade = CascadeType.ALL)
Cart cart;
}
产品类别
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@NamedQueries({ @NamedQuery(name = "Product.findBook", query = "SELECT p FROM Product p WHERE TYPE(p) = Book"),
@NamedQuery(name = "Product.findApparal", query = "SELECT p FROM Product p WHERE TYPE(p) = Apparal"),
@NamedQuery(name = "Product.findByName", query = "SELECT p FROM Product p WHERE p.productName=:name") })
public class Product {
/**
* productId.
*/
@Id
@GeneratedValue
@Column(name = "PRODUCT_ID")
Integer productId;
/**
* productName.
*/
@Column(name = "PRODUCT_NAME")
String productName;
/**
* price.
*/
@Column(name = "PRICE")
Float price;
}
保存用户的服务方法
userRepository.save(user);
邮递员中用于保存用户实体的 Json:
{
"cart": {
"cartId": 1,
"products": [
{
"cartProdcutId": 1,
"product": {
"price": 100,
"productId": 1,
"productName": "ProdNameOne"
},
"quantity": 1
}
]
},
"userId": 1,
"userName": "USERONE"
}
下面是第一行中更新 null 的数据库屏幕截图:数据库屏幕截图
解决方案
推荐阅读
- material-ui - 使用 Material-UI 和 NextJS 的类名不匹配
- html - 左侧带有垂直旋转标题的 HTML 表格
- go - 我正在尝试以广度优先方式遍历文件结构。我收到分段违规
- c# - 是否可以在 CEF 上启用 DNS-over-HTTPS?如何?
- c++ - OpenCV - 如何将 RGB 图像投影到 log (R/G) ~ log (B/G) 空间?
- php - Laravel 可重用函数
- reactjs - React PDF / 渲染器的内存溢出,无法渲染大量数据
- c# - C# 将 SqlDataReader 列值与 0 进行比较
- r - 将数据框从宽转换为长,但将堆叠的行作为列
- android - 更新 gradle 插件 3.6 后 Android App 运行时崩溃