我在 User 和 Diet 类之间有一个 @ManyToMany 关系表。表 (UserIsOnADiet) 有 2 个附加列:fromDate(开始节食)和 toDate(结束)。当用户注册节食时,我想在 fromDate 属性上设定一个值,因为它有一个非空约束。我怎样才能做到这一点?这是我的代码:
类用户
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer username_id;
private String username;
@ManyToMany
@JoinTable(
name = "is_on",
joinColumns = @JoinColumn(name = "username_id"),
inverseJoinColumns = @JoinColumn(name = "diet_id"))
private Set<Diet> userIsOnADiet;
班级饮食
@Entity
public class Diet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer diet_id;
private String diet_name;
@ManyToMany(mappedBy = "userIsOnADiet")
public List<User> users;
用户服务:
@Override
public User updateDiets(Integer id, Diet d) {
User u = this.findById(id);
Set<Diet> userDiets = u.getUserIsOnADiet();
userDiets.add(d);
// LocalDate fromDate = LocalDate.now();
// UserIsOnADiet userIsOnADiet = new UserIsOnADiet();
// userIsOnADiet.setFromDate(fromDate);
// I want to do something like this, but I cannot save User with null value on fromDate,
//and cannot set fromDate before creating a tuple in the database.
return this.userRepository.save(u);
}
uj5u.com热心网友回复:
您需要将连接表映射到附加物体,并将 @ManyToMany 关联替换为两个双向 @OneToMany 关联。
请参阅使用 JPA 和 Hibernate 时将多对多关联与额外列映射的最佳方式
对于简单的多对多数据库关系,您可以使用 @ManyToMany JPA 注释,因此隐藏连接表。
但是,有时您需要连接表中的两个外键列,为此,您需要将 @ManyToMany 关联替换为两个双向 @OneToMany 关联。与单向@OneToMany 不同,双向关系是映射一对多数据库关系的最佳方式,该关系需要在父端收集一组子元素
0 评论