প্রথমে কেএলই এর জবাব সম্পর্কে কিছু স্পষ্টতা :
আন-কন্ট্রাইন্ড (অবিচ্ছিন্ন) ওয়ান-টু-ওয়ান সমিতি কেবলমাত্র বাইটকোড উপকরণ ছাড়া প্রক্সি করা যায় না। এর কারণ হ'ল মালিক সত্তা জেনে রাখা উচিত যে অ্যাসোসিয়েশন সম্পত্তিটিতে প্রক্সি অবজেক্ট বা NULL থাকা উচিত কিনা এবং এটি নির্ধারণ করতে পারে না যে এটির বেস টেবিলের কলামগুলি দেখে একের পর এক ভাগ করে ভাগ করা পিকে মাধ্যমে ম্যাপ করা হয়, তাই এটি প্রক্সিটি অর্থহীন তৈরি করে অধীর আগ্রহে আনতে হবে। এখানে আরও বিস্তারিত ব্যাখ্যা দেওয়া হল।
বহু-থেকে-এক সমিতি (এবং এক থেকে অনেকগুলি স্পষ্টতই) এই সমস্যাটিতে ভুগছেন না। মালিক সত্তা সহজেই তার নিজস্ব এফকে চেক করতে পারে (এবং একাধিকের ক্ষেত্রে খালি সংগ্রহের প্রক্সি শুরুতে তৈরি করা হয় এবং চাহিদা অনুসারে জনবহুল হয়), তাই সমিতি অলস হতে পারে।
একের সাথে একের সাথে একের সাথে প্রতিস্থাপন করা খুব ভাল ধারণা কখনও নয়। আপনি এটি অনন্য বহু-একের সাথে প্রতিস্থাপন করতে পারেন তবে অন্যান্য (সম্ভবত আরও ভাল) বিকল্প রয়েছে।
রব এইচ , একটি বৈধ বিন্দু আছে তবে আপনি আপনার মডেল উপর নির্ভর করে এটি বাস্তবায়ন করতে সক্ষম নাও হতে পারে (উদাঃ আপনার একের সাথে এক সমিতি যদি হয় nullable)।
এখন, যতদূর আসল প্রশ্ন যায়:
ক) @ManyToOne(fetch=FetchType.LAZY)ঠিক কাজ করা উচিত। আপনি কি নিশ্চিত যে এটি নিজেই ক্যোয়ারিতে ওভাররাইট করা হচ্ছে না? join fetchএইচকিউএল এবং / অথবা নির্দিষ্টভাবে ক্রিটারিয়া এপিআইয়ের মাধ্যমে স্পষ্টভাবে সেট আনার মোড সেট করা সম্ভব যা বর্গ টীকাটির চেয়ে বেশি অগ্রাধিকার গ্রহণ করবে। যদি এটি না হয় এবং আপনার এখনও সমস্যা হয় তবে দয়া করে আপনার ক্লাসগুলি পোস্ট করুন, ক্যোয়ারী করুন এবং এসকিউএলকে আরও টু দ্য পয়েন্ট কথোপকথনের জন্য ফলাফল দিন।
খ) @OneToOneকৌশলযুক্ত। যদি এটি অবশ্যই নিঃসরণযোগ্য না হয় তবে রব এইচ এর পরামর্শ নিয়ে যান এবং এটিকে নির্দিষ্ট করুন:
@OneToOne(optional = false, fetch = FetchType.LAZY)
অন্যথায়, আপনি যদি আপনার ডাটাবেস পরিবর্তন করতে পারেন (মালিকের টেবিলে একটি বিদেশী কী কলামটি যুক্ত করুন), এটি করুন এবং এটিকে "যোগদান" হিসাবে মানচিত্র করুন:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="other_entity_fk")
public OtherEntity getOther()
এবং অন্যান্যরূপে:
@OneToOne(mappedBy = "other")
public OwnerEntity getOwner()
যদি আপনি এটি করতে না পারেন (এবং উত্সাহিত আনার সাথে বাঁচতে না পারেন) বাইটকোড উপকরণ আপনার একমাত্র বিকল্প। আমার অবশ্য সিপারকিন্সের সাথে একমত হতে হবে - আপনার যদি 80 থাকে !!! আগ্রহী ওয়ানটোয়ান সংঘের কারণে যোগ দেয়, আপনার তখন বড় সমস্যা হয়েছে :-)
one-to-oneএকটি সূত্র সহ একটি ব্যবহার করুনselect other_entity.id from other_entity where id = other_entity.id। অবশ্যই, ক্যোয়ারী পারফরম্যান্সের জন্য এটি আদর্শ নয়।