হ্যাঁ, এটি সম্ভব। এটি স্ট্যান্ডার্ড দ্বিদ্বিতীয় @ManyToOne/ @OneToManyসম্পর্কের একটি বিশেষ ক্ষেত্রে । এটি বিশেষ কারণ সম্পর্কের প্রতিটি প্রান্তে সত্তা একই। সাধারণ কেসটি জেপিএ ২.০ অনুচ্ছেদের ২.১০.২ বিভাগে বিশদে রয়েছে ।
এখানে একটি কাজের উদাহরণ। প্রথম, সত্তা শ্রেণি A:
@Entity
public class A implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@ManyToOne
private A parent;
@OneToMany(mappedBy="parent")
private Collection<A> children;
}
এখানে একটি রুক্ষ main()পদ্ধতি যা এই জাতীয় তিনটি সত্তাকে স্থায়ী করে:
public static void main(String[] args) {
EntityManager em = ...
em.getTransaction().begin();
A parent = new A();
A son = new A();
A daughter = new A();
son.setParent(parent);
daughter.setParent(parent);
parent.setChildren(Arrays.asList(son, daughter));
em.persist(parent);
em.persist(son);
em.persist(daughter);
em.getTransaction().commit();
}
এক্ষেত্রে লেনদেনের প্রতিশ্রুতি দেওয়ার আগে তিনটি সত্তা উদাহরণ থাকতে হবে। আমি যদি পিতা-মাতার সন্তানের সম্পর্কের গ্রাফের কোনও একটি সত্তাকে অবিচল রাখতে ব্যর্থ হই, তবে তার ব্যতিক্রমও ছুঁড়ে দেওয়া হবে commit()। ইক্লিপসেলিংকে, RollbackExceptionএটি অসঙ্গতিটির বিবরণ দেয় is
এই আচরণ মাধ্যমে কনফিগার করা যাবে cascadeউপর অ্যাট্রিবিউট Aএর @OneToManyএবং @ManyToOneটীকা। উদাহরণস্বরূপ, যদি আমি cascade=CascadeType.ALLএই দুটি টীকাকে সেট করে রাখি তবে আমি নিরাপদে সত্তার একটির চালিয়ে যেতে এবং অন্যকে উপেক্ষা করতে পারি। বলুন আমি parentআমার লেনদেনে জেদ করেছিলাম জেপিএ বাস্তবায়ন parentএর childrenসম্পত্তি চিহ্নিত করেছে কারণ এটি চিহ্নিত রয়েছে CascadeType.ALL। জেপিএ বাস্তবায়ন খুঁজে পায় sonএবং daughterসেখানে। এটি তখন উভয় বাচ্চাকে আমার পক্ষে চালিয়ে যায়, যদিও আমি স্পষ্টভাবে এটির জন্য অনুরোধ করি নি।
আরও একটি নোট। দ্বিপাক্ষিক সম্পর্কের উভয় পক্ষকে আপডেট করা সর্বদা প্রোগ্রামারের দায়িত্ব। অন্য কথায়, আমি যখনই কোনও সন্তানের পিতামাতার সাথে যুক্ত করি তখন অবশ্যই আমাকে সেই অনুযায়ী সন্তানের পিতামাতার সম্পত্তি আপডেট করতে হবে। দ্বি নির্দেশমূলক সম্পর্কের কেবলমাত্র এক পক্ষ আপডেট করা জেপিএ-এর অধীনে ত্রুটি। সম্পর্কের উভয় দিক সর্বদা আপডেট করুন। এটি জেপিএ ২.০ অনুচ্ছেদের ৪২ পৃষ্ঠায় নির্বিঘ্নে লেখা হয়েছে:
নোট করুন যে এটি সেই অ্যাপ্লিকেশন যা রানটাইম সম্পর্কের ধারাবাহিকতা বজায় রাখার জন্য দায়িত্ব বহন করে - উদাহরণস্বরূপ, দ্বিমুখী সম্পর্কের "এক" এবং "অনেক" পক্ষ একে অপরের সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য বীমাটি প্রয়োগ করার সময় অ্যাপ্লিকেশন রানটাইমের সময় সম্পর্কের আপডেট করে ।