1

I'm studying bidirectional mapping. I mapped Team and Member with @OneToOne and @ManyToMany annotations.

@Entity
public class Team {
    @Id @GeneratedValue
    private Long id;

    private String name;

    @OneToMany(mappedBy = "team")
    private List<Member> members=new ArrayList<Member>();

    //omit getter, setter ,toString

}

@Entity
public class Member {

    @Id
    @GeneratedValue
    private Long id;

    @Column(name="USERNAME")
    private String name;

    @ManyToOne
    @JoinColumn(name="TEAM_ID")
    private Team team;


    @Enumerated(EnumType.STRING)
    private Status status;

    //omit getter, setter , toString

}

main method

public static void main(String args[]){
    //...
    Team team= new Team();
    team.setName("RedTeam");
    em.persist(team);

    Member member= new Member();
    member.setName("me");
    member.setStatus(Status.ADMIN);
    member.setTeam(team);
    em.persist(member);


    Member findmember= em.find(Member.class, member.getId());
    Team findTeam= findmember.getTeam();
    System.out.println("members: "+findTeam.getMembers());

    //...
}

results:

members: []

I wonder why "members" were not added to the "members field" of "Team" in the code above. Thank you in advance.

Hyunj
  • 49
  • 1
  • 1
  • 4
  • Does this answer your question? [What is “the inverse side of the association” in a bidirectional JPA OneToMany/ManyToOne association?](https://stackoverflow.com/questions/2584521/what-is-the-inverse-side-of-the-association-in-a-bidirectional-jpa-onetomany-m) – Stuck Apr 28 '20 at 15:30
  • Thank you for answering. I understood that Member entity in my case is the owner of the association. However I don't know the reason why I can't read members info by using team.getMembers(). – Hyunj Apr 28 '20 at 17:25

1 Answers1

0

These are the minimal changes to make it to work

@Entity
public class Team {
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private @Id Long id;

    private String name;

    @OneToMany(mappedBy = "team", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Member> members = new ArrayList<>();

    public String getName() {
        return name;
    }

    public void setName(String pName) {
        name = pName;
    }

    public void addMember(Member m) {
        getMembers().add(m);
        m.setTeam(this);
    }

    public void removeMember(Member m) {
        getMembers().remove(m);
        m.setTeam(null);
    }

    public List<Member> getMembers() {
        return members;
    }
} 

        Team team = new Team();
        team.setName("RedTeam");
        // em.persist(team);

        Member member = new Member();
        member.setName("" + new Random().nextInt(999999));

        team.addMember(member);

        em.persist(team);

        Member findmember = em.find(Member.class, member.getId());
        Team findTeam = findmember.getTeam();
        System.out.println("Members: " + findTeam.getMembers());
wromma
  • 21
  • 1
  • 5