我有两类食物和食物类型:
public class Food {
//other attributes and constructor and getters and setters are ignored
@ManyToMany(targetEntity = FoodType.class, fetch = FetchType.LAZY)
@JoinTable(name = "food_type_",
joinColumns = {@JoinColumn(name = "fid")},
inverseJoinColumns = {@JoinColumn(name = "tid")})
private List<FoodType> types = new ArrayList<>();
}
public class FoodType {
@Id
@GeneratedValue
private long id;
private String type;
@ManyToMany(targetEntity = Food.class, fetch = FetchType.LAZY, mappedBy = "types")
private List<Food> foodList = new ArrayList<>();
//constructor and getters and setters are ignored
}
要求是:应该允许用户通过视图添加新的食物,因此我想知道如何在视图中添加FoodType到Food?
我已经读过这个answer,看起来在视图中操作数据并不是一个好主意,所以如果你是程序员,你将如何设计MVC层以便它能够正确处理需求?
PS:我对JS知之甚少,是否可以在Thymeleaf中做到这一点?
您应该遵循MVC分层架构以正确实现您的需求。作为一般设计指南:
作为最后的评论;如何将多个FoodType
保存到单个Food
对象如下(在您的控制器或业务逻辑层中,您可以执行此操作):
Food aFood = new Food(); // Empty Food to save
aFood.types.add(new FoodType(id, "Pizza"));
aFood.types.add(new FoodType(id, "Burger"));
foodService.save(aFood); // Assuming you are using Service Layer