簡體   English   中英

@OneToMany 和 @ManyToOne Spring 數據 JPA 子不更新父

[英]@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM