如何防止仅在休眠状态的子表中进行更新操作单向一对多映射?

问题描述

我有两个表Restaurant和FoodItems。

我的要求:

  1. 如果我添加了餐厅数据,则需要添加FoodItems数据。
  2. 如果我删除了餐厅数据,则需要删除FoodItems数据。
  3. 如果我更新了Restaurant数据,则不需要更新FoodItems数据。

面临的问题:
当我更新餐厅的详细信息时,美食项目数据也会随之更新。

复制步骤:
我使用邮差工具将JSON数据发送到Java端。
JSON:

{ “ restaurantId”:1 “ restaurantName”:“ Salem $$”, “ restaurantAddress”:“ omr,chennai” }

我没有在JSON中传递foodItems。当我直接在Java端调用session.update(restaurant)时, 然后删除fooditems数据。
我知道这是因为餐厅表中的cascade = CascadeType.ALL选项。

我的查询
但是我不知道如何防止更新操作。 我是新来的冬眠。请帮助我们摆脱这个问题。 预先感谢

Restaurant.java

@Getter
@Setter
@Entity
@Table(name = "restaurant")
public class Restaurant {

    @Column(name = "restaurant_id")
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int restaurantId;

    @Column(name = "restaurant_name",nullable = false)
    private String restaurantName;

    @Column(name = "restaurant_address",nullable = false)
    private String restaurantAddress;

    @OnetoMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinTable(name = "restaurant_fooditems",joinColumns = {@JoinColumn(name="restaurant_id",referencedColumnName = "restaurant_id")},inverseJoinColumns = {@JoinColumn(name="food_id",referencedColumnName = "food_id")})
    private Set<FoodItems> foodItems;

}

FoodItems.java

@Getter
@Setter
@Entity
@Table(name = "fooditems")
public class FoodItems {

    @Column(name = "food_id")
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int foodId;

    @Column(name = "food_name",nullable = false)
    private String productName;

    @Column(name = "price",nullable = false)
    private double price;

}

解决方法

我知道这是因为餐厅表中的cascade = CascadeType.ALL选项。

嗯,不完全是。这是因为cout << *pc << endl; ^ dereferences pc to print only the single character it points to 是其自身与Restaurant之间的关联的所有者。这意味着关联状态由FoodItem属性控制。

假设您只是在服务方法中调用Restaurant.foodItems,则如果restaurantRepository.save(restaurant)为空,则假定所有先前的Restaurant.foodItems都已从关联中删除。即使没有foodItem,问题也将继续存在。

最简单的解决方案是从数据存储区加载原始CascadeType.ALL,并仅复制要更新的字段-诸如此类:

Restaurant