KKG
Programming
KKG
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ์ „์ฒด ๊ธ€ ๋ณด๊ธฐ (84)
    • ํšŒ๊ณ  (9)
    • Bootcamp (19)
    • Error Handling (2)
    • Kotlin (1)
    • Java (19)
      • Java (14)
      • Spring (1)
      • JPA (2)
      • Link (2)
    • Python (5)
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (20)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (4)
      • ๋ฐฑ์ค€ (14)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (1)
      • Link (1)
    • SQL (5)
      • SQL (1)
      • MySQL (4)
    • Web (2)
    • etc (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก
  • ๊นƒํ—ˆ๋ธŒ

์ธ๊ธฐ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
KKG

Programming

Java/JPA

[JPA] ์—”ํ‹ฐํ‹ฐ ์„ค๊ณ„์‹œ ์ฃผ์˜์ 

2022. 9. 12. 23:27

๐Ÿ“„ ๊ฐ’ ํƒ€์ž…์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ค๊ณ„ํ•œ๋‹ค.

    @Embeddable
    @Getter
    @AllArgsConstructor
    public class Address {
        private String city;
        private String street;
        private String zipcode;

        protected Address() {
        }
    }

Setter๋ฅผ ์ œ๊ฑฐํ•ด ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

JPA ์ŠคํŽ™์ƒ ์ž„๋ฒ ๋””๋“œ ํƒ€์ž…์€ public ๋˜๋Š” protected์ธ ๋นˆ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  • ๊ทธ๋‚˜๋งˆ ์•ˆ์ „ํ•œ protected ์ œ์–ด์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿ“„ ๊ฐ€๊ธ‰์  Setter๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

Setter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€๊ฒฝ ํฌ์ธํŠธ๊ฐ€ ๋งŽ์•„ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.

 

๐Ÿ“„ ๋ชจ๋“  ์—ฐ๊ด€๊ด€๊ณ„๋Š” ์ง€์—ฐ ๋กœ๋”ฉ์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

  • ์ฆ‰์‹œ ๋กœ๋”ฉ FetchType.EAGER๋Š” ์˜ˆ์ธก๊ณผ SQL ์ถ”์ ์ด ์–ด๋ ต๋‹ค.
  • JPQL์„ ์‚ฌ์šฉํ•  ๋•Œ N + 1 ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋ชจ๋“  ์—ฐ๊ด€๊ด€๊ณ„๋Š” FetchType.LAZY๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "order_id")
    private Order order;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "item_id")
    private Item item;

OneToOne, ManyToOne ๊ด€๊ณ„์˜ ๊ธฐ๋ณธ๊ฐ’์ด FetchType.EAGER์ด๋ฏ€๋กœ ์ง€์—ฐ ๋กœ๋”ฉ ์„ค์ •์„ ํ•ด์ค€๋‹ค.

์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ•จ๊ป˜ ์กฐํšŒํ•  ๋•Œ๋Š” fetch join ๋˜๋Š” ์—”ํ‹ฐํ‹ฐ ๊ทธ๋ž˜ํ”„ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ“„ ์ปฌ๋ ‰์…˜์€ ํ•„๋“œ์—์„œ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

    @OneToMany(mappedBy = "member")
    private final List<Order> orders = new ArrayList<>();
  • ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๋‹ค.
  • null ๋ฌธ์ œ์—์„œ ์•ˆ์ „ํ•ด์ง„๋‹ค.
    Member member = new Member();
    System.out.println(member.getOrders().getClass());
    em.persist(team);
    System.out.println(member.getOrders().getClass());

    // ์ถœ๋ ฅ
    class java.util.ArrayList
    class org.hibernate.collection.internal.PersistentBag
  • ํ•˜์ด๋ฒ„๋„ค์ดํŠธ์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์†ํ™”ํ•  ๋•Œ ์ปฌ๋ ‰์…˜์„ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ๋‚ด์žฅ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ณ€๊ฒฝ์‹œํ‚จ๋‹ค.
  • ๊ฐ’์„ ์ž„์˜๋กœ ์ˆ˜์ •ํ•˜๋ฉด ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ๋œ ๋™์ž‘์„ ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค.
 
    'Java/JPA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [JPA] ํŒจํ„ด, ์ค€์˜์† ์—”ํ‹ฐํ‹ฐ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”