如何让hibernate一次将实体数据保存到所有相关表中?

How to make hibernate to save entity data to all related tables at once?

我使用额外的 table team_memberTeamTeamMember 之间建立了多对多关系。 Hibernate 仅将数据保存到 member table 而忽略 team_member。如何让它发挥作用?

DAOImpl

public void addTeamMember(TeamMember teamMember) {
        getCurrentSession().save(teamMember);
    }

子实体

@Entity
@Table(name="member")
public class TeamMember {
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "teamMembers", cascade = CascadeType.ALL)
    public Set<Team> getTeams() {
        return teams;
    }

    public void setTeams(Set<Team> teams) {
        this.teams = teams;
    }
}

父实体

@Entity
@Table(name="teams")
public class Team {

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "team_member", joinColumns =
    @JoinColumn(name = "FK_Team_id", referencedColumnName= "id"),
            inverseJoinColumns = @JoinColumn(name = "FK_Member_id", referencedColumnName = "id")
    )
    public Set<TeamMember> getTeamMembers() {
        return teamMembers;
    }

    public void setTeamMembers(Set<TeamMember> teamMembers) {
        this.teamMembers = teamMembers;
    }
}

当您在 TeamMember 上写 mappedby 时,您对 JPA 说,Team 将负责管理这种关系。这意味着您必须手动将成员添加到团队列表中才能让它生效(cascadeType 都确保它)。

TeamMember member = new TeamMember()...

EM.getTransactio().beging(); //if manage transactions manually
Team team = EM.find(Team.class,id);
team.getTeamMembers().add(member);
EM.getTransaction().commit();