@ManyToMany

@ManyToMany๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ๋งคํ•‘ํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.

@Entity
public class Member {
    @Id @Column(name = "MEMBER_ID")
    private String id;

    private String username;

    @ManyToMany
    @JoinTable (name = "MEMBER_PRODUCT", joinColumns = @JoinColumn (name = "MEMBER_ID"), inverseJoinColumns = @JoinColumn(name="PRODUCT_ID")
    private List<Product> products = new ArrayList<Product>();
}

@Entity
public class Product {

    @Id @Column(name = "PRODUCT_ID")
    private String id;

    private String name;
}

์œ„๋Š” ๋‹ค๋Œ€๋‹ค ๋‹จ๋ฐฉํ–ฅ ๋งคํ•‘์ด๋‹ค. @ManyToMany ์–ด๋…ธํ…Œ์ด์…˜์„ ์„ ์–ธ ํ›„ @JoinTable์„ ์จ์ฃผ๋ฉด ์ƒˆ๋กœ์šด ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ jpa๊ฐ€ ์•Œ์•„์„œ ๋งคํ•‘์„ ํ•ด์ค€๋‹ค.

@JoinTable๊ณผ @JoinColumn์˜ ์ฐจ์ด์ ์€ @JoinTable์€ ์—ฐ๊ฒฐ ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•˜์ง€๋งŒ @JoinColumn์€ ์™ธ๋ž˜ํ‚ค๋ฅผ ์ง€์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ @JoinTable์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ…Œ์ด๋ธ”์ด ํ•˜๋‚˜ ๋” ํ•„์š”ํ•œ ์…ˆ์ด๋‹ค.

@Entity
public class Product {

    @Id
    private String id;

    @ManyToMany(mappedBy = "products")
    private List<Member> members;
}

์œ„๋Š” ๋‹ค๋Œ€๋‹ค ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„์˜ Product ์—”ํ‹ฐํ‹ฐ์ด๋‹ค. ๋‹ค๋Œ€์ผ ๊ด€๊ณ„์—์„œ ๋ดค๋˜ ๊ฒƒ์ฒ˜๋Ÿผ mappedBy๋ฅผ ์“ฐ๋ฉด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋Ÿฐ @ManyToMany๋Š” ์‹ค์ œ๋กœ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์—ฐ๊ฒฐ ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€์ ์ธ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์—ฐ๊ฒฐ ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€์ ์ธ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด, Member๋‚˜ Product์—”ํ‹ฐํ‹ฐ์—์„œ ๊ทธ๊ฒƒ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฆ‰ ํ…Œ์ด๋ธ”์˜ ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ์— @ManyToMany๋Œ€์‹  @ManyToOne + @ManyToOne ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€์•ผ ํ•œ๋‹ค.

Last updated