我在 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 不同,雙向關系是映射一對多資料庫關系的最佳方式,該關系需要在父端收集一組子元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408626.html
標籤:
