如何解决如何防止仅在休眠状态的子表中进行更新操作单向一对多映射?
我有两个表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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。