![](/img/trans.png)
[英]Spring Data JPA - Hibernate - OneToMany, ManytoOne bidirectional
[英]@OneToMany and @ManyToOne Spring Data JPA Child does not update Parent
我在簡單的場景中苦苦掙扎,我必須指定一個由許多開發人員組成的團隊,而一個開發人員只能擁有一個團隊。
這是我目前的兩個 POJO,但它開始變得復雜,我開始討厭它。 不確定什么是最好的方法。
@Entity
@Data
@EqualsAndHashCode(exclude = {"team"})
@ToString(exclude = {"team"})
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Developer {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String name;
@ManyToOne(optional = false)
@JsonIgnoreProperties(value = {"developers"})
private Team team;
}
@Entity
@Data
@EqualsAndHashCode(exclude = {"developers"})
@ToString(exclude = {"developers"})
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Team {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String name;
private String description;
@OneToMany(mappedBy = "team", cascade = CascadeType.ALL)
@JsonIgnoreProperties(value = {"team"})
private List<Developer> developers;
}
我現在遇到的問題是,如果我創建一個團隊,然后將兩個開發人員分配給它,然后再次檢索該團隊,開發人員列表仍然是 null。 我錯過了什么? 我當然可以手動更新團隊列表,但這違背了 JPA 幫助我的目的。 任何意見將是有益的。
@Autowired
private TeamRepository underTest;
@Autowired
private DeveloperRepository developerRepository;
Team team = Team.builder()
.name("Team 1")
.build();
Team team1 = underTest.save(team);
Developer developer1 = Developer.builder()
.name("Stefan Bratanov")
.team(team1)
.build();
Developer developer2 = Developer.builder()
.name("Darth Vader")
.team(team1)
.build();
List<Developer> developers = Arrays.asList(developer1, developer2);
developerRepository.saveAll(developers);
Optional<Team> maybeTeamWithDevelopers = underTest.findById(team1.getId());
assertThat(maybeTeamWithDevelopers).isPresent();
Team teamWithDevelopers = maybeTeamWithDevelopers.get();
assertThat(teamWithDevelopers.getDevelopers()).containsExactlyInAnyOrder(developer1, developer2); //DEVELOPERS IS NULL HERE
@Entity
@Data
@EqualsAndHashCode(exclude = {"developers"})
@ToString(exclude = {"developers"})
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Team {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String name;
private String description;
@OneToMany(mappedBy = "team", cascade = CascadeType.ALL)
@JsonIgnoreProperties(value = {"team"})
private List<Developer> developers = new ArrayList<>;
Team addDeveloper(Developer dev) {
dev.setTeam(this);
this.getDevelopers().add(dev);
return this;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.