برنامه نویسی

رابطه JPA Manytoon و به استراتژی بپیوندید

JPA (API پایداری جاوا) به شما امکان می دهد وظایف پایگاه داده را بطور عینی پردازش کنید. با این حال ، بسته به رابطه بین نهاد و روش پرس و جو ، ممکن است عملکرد و یکپارچگی داده برنامه بسیار متفاوت باشد.

در این مقاله @ManyToOne استراتژی پیوستن JPA و @JoinColumnاز nullable به جلوه های خاصیت در پرس و جو نگاه کنید و روش تنظیم بهینه را ارائه دهید.

1

از طریق کد مثال زیر @ManyToOne بیایید نگاهی به نحوه ایجاد یک رابطه بپردازیم.

تیمی

@Entity
@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString(exclude = "members") // 순환 참조 방지
public class Team {
    @Id @GeneratedValue
    @Column(name = "TEAM_ID")
    private Long id;

    private String name;

    @OneToMany(mappedBy = "team") // 양방향 관계
    private List<Member> members = new ArrayList<>();

    // 양방향 관계 편의 메서드
    public void addMember(Member member) {
        member.setTeam(this);
        members.add(member);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نهاد عضو

@Entity
@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString(exclude = "team") // 순환 참조 방지
public class Member {
    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    private String username;

    @ManyToOne(fetch = FetchType.LAZY) // 지연 로딩
    @JoinColumn(name = "TEAM_ID", nullable = false) // NULL 허용 여부 설정
    private Team team;
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

Member موجودیت Team موجودیت @ManyToOne رابطه داشته باشید @JoinColumn(name = "TEAM_ID")از طریق Member یک ستون کلید خارجی در جدول ایجاد کنید.

2. ویژگی واکشی: بلافاصله بارگیری در مقابل. بارگیری تاخیر

@ManyToOne حاشیه نویسی fetch این ملک تصمیم می گیرد که چه زمانی موجودیت مرتبط را به همراه خواهد داشت.

ویژگی واکشی توضیح شایستگی ضرر
مشتاق Member تحقیق Teamبلافاصله جستجو کنید همه پرس و جو با یک پرس و جو بارگیری داده های غیر ضروری در دسترس است
تنبل Member تحقیق Teamپرس و جو در صورت لزوم بهینه سازی عملکرد پرس و جو اضافی ممکن است رخ دهد (مشکل N+1)

برای جلوگیری از مشکل N+1 JOIN FETCH (JPQL) یا @EntityGraphاستفاده از آن خوب است.

3. خصوصیات قابل تهی: NULL اجازه و استراتژی پیوستن

@JoinColumnاز nullable ویژگی ها مجاز را برای اجازه دادن به تهی ستون کلید سرپایی تنظیم می کنند و بر نوع پرس و جو وصل ایجاد شده توسط JPA تأثیر می گذارند.

دارایی قابل برگشت توضیح پیوستن
true (پیش فرض) ستون کلید سرپایی اجازه می دهد پیوستن به بیرونی
false ستون کلید سرپایی اجازه تهی نمی کند پیوستن به داخل

تغییر در روش پیوستن با توجه به اینکه آیا تهی اجازه می دهد

  • nullable = trueLEFT OUTER JOIN استفاده شده (متصل Teamحتی اگر وجود نداشته باشد Member استعلام)
  • nullable = falseINNER JOIN استفاده شده (متصل Teamنابراب Memberپرسیده نمی شود)

اتصال داخلی اغلب سودمندتر از Left Left Lefter است.

4.

EAGER + NULLABLE = TRUE (پیوستن به بیرونی چپ)

SELECT m.MEMBER_ID, t.TEAM_ID, t.name, m.username
FROM Member m
LEFT JOIN Team t ON t.TEAM_ID = m.TEAM_ID
WHERE m.MEMBER_ID = ?;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

Eage + nullable = false (inner join)

SELECT m.MEMBER_ID, m.TEAM_ID, t.TEAM_ID, t.name, m.username
FROM Member m
JOIN Team t ON t.TEAM_ID = m.TEAM_ID
WHERE m.MEMBER_ID = ?;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تنبل (بدون عضویت ، پرس و جو اضافی رخ می دهد)

-- Member 조회 (Team 조인 없음)
SELECT m.MEMBER_ID, m.TEAM_ID, m.username
FROM Member m
WHERE m.MEMBER_ID = ?;

-- findMember.getTeam().getName() 호출 시 추가 쿼리 실행
SELECT t.TEAM_ID, t.name
FROM Team t
WHERE t.TEAM_ID = ?;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

em.getReference(Team.class, id)با استفاده از یک شیء پروکسی باز می گردد.

5. راهنمای انتخاب بهینه

✅ برای حفظ یکپارچگی داده ها:

  • nullable = false (هر Memberلزوماً Teamباید متعلق باشد)
  • INNER JOINعملکرد را می توان از طریق

✅ اگر می خواهید بهینه سازی عملکرد:

  • FetchType.LAZY استفاده (بارگیری داده های غیر ضروری)
  • در صورت لزوم JOIN FETCH(JPQL) یا @EntityGraph ترکیب

✅ اگر به یک مدل داده انعطاف پذیر نیاز دارید:

  • nullable = true (غیر منتظره Memberمجاز)
  • LEFT OUTER JOINبا استفاده از از دست دادن داده ها جلوگیری کنید

✅ در صورت نیاز به شناسه:

  • em.getReference() استفاده (پیشگیری از تحقیق غیر ضروری)

پایان

استفاده صحیح از استراتژی پیوستن JPA و محدودیت های تهی می تواند عملکرد و یکپارچگی داده برنامه را همزمان تضمین کند.

مهم است که با در نظر گرفتن مدل داده و الزامات عملکرد مورد نیاز پروژه ، تنظیم بهینه را انتخاب کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا