Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

Fetch Type in JPA

📖توضیحات درس

🎥 این ویدیو قسمت نود و ششم از بوت‌کمپ رایگان جاوا است. 📚 در این جلسه از مسیر Java ORM (JPA / Hibernate) سراغ یکی از مفاهیم بسیار مهم در کار با دیتابیس می‌رویم: Fetch Type در JPA. در این ویدیو به طور کامل بررسی می‌کنیم که FetchType.EAGER و FetchType.LAZY چه تفاوت‌هایی دارند و هر کدام در چه شرایطی باید استفاده شوند. این موضوع یکی از نکات بسیار مهم در طراحی صحیح لایه‌ی Persistence در برنامه‌های جاوا است و تاثیر مستقیمی روی Performance و ساختار صحیح ORM دارد. در طول ویدیو ابتدا با مفهوم Fetch Type آشنا می‌شویم و سپس با یک تست واقعی رفتار Lazy Loading و Eager Loading را در عمل مشاهده می‌کنیم تا درک بهتری از نحوه بارگذاری داده‌ها توسط JPA داشته باشیم. در این جلسه یاد می‌گیریم: ⚙️ مفهوم Lazy Loading و Eager Loading در JPA چیست 🧪 بررسی رفتار آن‌ها با یک Real Test در پروژه واقعی ✅ مزایا و معایب Lazy Load در طراحی سیستم ✅ مزایا و معایب Eager Load و مشکلات احتمالی آن 📦 بررسی Fetch Type پیش‌فرض در JPA برای Associationها ⚠️ بررسی این موضوع مهم که چرا در بسیاری از موارد Eager Loading یک Code Smell محسوب می‌شود 🧠 در پایان نیز یک جمع‌بندی کامل از نکات مهم جلسه خواهیم داشت اگر در حال یادگیری Hibernate یا JPA هستید، درک درست Fetch Strategy یکی از مهم‌ترین مهارت‌هایی است که به شما کمک می‌کند از مشکلاتی مثل Performance Issue ، N+1 Query Problem و بارگذاری غیرضروری داده‌ها جلوگیری کنید. 📌یوتیوب: youtube.com/@farzadafi 📌آپارت: aparat.com/farzadafi 📌وب سایت: https://farzadafi.ir 📌 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشته باشید می‌توانید در گروه بپرسید تا من یا مربی‌های گروه کمکتان کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش کاملاً پروژه‌محور برای یادگیری عمیق جاوا و ورود به بازار کار.
00:22:47🎯رایگان

📄جزوه

مفاهیم کلیدی

  • Eager Loading

    در این روش، داده‌های وابسته بلافاصله همراه با entity اصلی بارگذاری می‌شوند. یعنی وقتی یک object از دیتابیس گرفته می‌شود، ارتباط‌های آن هم همان لحظه در memory لود می‌شوند.

  • Lazy Loading

    در این روش، داده‌های وابسته فقط زمانی بارگذاری می‌شوند که واقعاً به آن‌ها نیاز داشته باشیم. این کار باعث کاهش مصرف memory و جلوگیری از بارگذاری غیرضروری داده‌ها می‌شود.

  • ORM

    مکانیزمی برای نگاشت objectهای جاوا به جدول‌های دیتابیس. در ORM، نحوه‌ی fetch شدن داده‌ها اهمیت زیادی در performance دارد.

  • Fetch Type

    تعیین می‌کند که یک ارتباط بین entityها به صورت eager یا lazy بارگذاری شود.

  • FetchType.LAZY

    داده‌های مرتبط را تا زمان استفاده واقعی بارگذاری نمی‌کند. این گزینه برای جلوگیری از loading اضافی و بهینه‌سازی performance بسیار مهم است.

  • FetchType.EAGER

    داده‌های مرتبط را بلافاصله لود می‌کند. این روش ساده‌تر است اما ممکن است باعث بارگذاری بیش از حد داده‌ها شود.

  • @JoinColumn

موارد مصاحبه ای

  • فرق Lazy Loading و Eager Loading چیست؟

    در Lazy Loading داده‌های وابسته فقط هنگام نیاز بارگذاری می‌شوند، اما در Eager Loading همه‌چیز همان ابتدا لود می‌شود.

  • چرا Lazy Loading معمولاً بهتر است؟

    چون فقط داده‌های لازم را می‌گیرد، memory کمتری مصرف می‌کند و از بارگذاری غیرضروری جلوگیری می‌کند.

  • مشکل Eager Loading چیست؟

    ممکن است باعث لود شدن حجم زیادی از داده‌های بی‌استفاده شود و performance را کاهش دهد.

  • Fetch Type در JPA چه نقشی دارد؟

    مشخص می‌کند ارتباط بین entityها چه زمانی از دیتابیس دریافت شود.

  • FetchType.LAZY برای چه موقعیت‌هایی مناسب است؟

    وقتی احتمال دارد همیشه به داده‌های مرتبط نیاز نداشته باشیم و بخواهیم لود شدن آن‌ها را به تعویق بیندازیم.

  • FetchType.EAGER برای چه موقعیت‌هایی مناسب است؟

    وقتی مطمئن هستیم داده‌های وابسته همیشه مورد نیاز هستند و می‌خواهیم همان ابتدا همه‌چیز آماده باشد.

  • چرا Eager Loading می‌تواند خطرناک باشد؟

    چون ممکن است هنگام لود یک entity ساده، تعداد زیادی object مرتبط هم ناخواسته وارد memory شوند.

بیشتر بدانید

  • نکته عملکردی

    در بسیاری از پروژه‌ها، Lazy Loading انتخاب امن‌تر و بهینه‌تری است، چون از بارگذاری اضافی جلوگیری می‌کند.

  • نکته طراحی

    Eager Loading اگر بدون دقت استفاده شود، می‌تواند باعث ایجاد وابستگی‌های سنگین و غیرقابل پیش‌بینی در لایه persistence شود.

  • نکته مفهومی

    فهم درست fetch strategy یکی از مهم‌ترین مهارت‌ها برای کار با Hibernate و Spring Data JPA است.