拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 在@ManyToMany关系表springboot中设定附加属性的值

在@ManyToMany关系表springboot中设定附加属性的值

白鹭 - 2022-03-03 1948 0 0

我在 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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *