টেবিল-স্তরের সম্পর্ক
আমাদের দুটি টেবিল আবার তাকান:
আইডি | নাম | পেশা | বেতন | বয়স | তারিখ যোগ দিতে |
---|---|---|---|---|---|
1 | ইভানভ ইভান | প্রোগ্রামার | 100000 | 25 | 2012-06-30 |
2 | পেট্রোভ পেট্র | প্রোগ্রামার | 80000 | 23 | 2013-08-12 |
3 | ইভানভ সের্গেই | পরীক্ষক | 40000 | ত্রিশ | 2014-01-01 |
4 | রাবিনোভিচ মইশা | পরিচালক | 200000 | 35 | 2015-05-12 |
5 | কিরিয়েনকো আনাস্তাসিয়া | অফিস ব্যবস্থাপক | 40000 | 25 | 2015-10-10 |
6 | ভাস্কা | বিড়াল | 1000 | 3 | 2018-11-11 |
কর্মচারী টেবিল:
এই টেবিলে নিম্নলিখিত কলাম আছে:
- আইডি আইএনটি
- নাম VARCHAR
- পেশা ভার্চা
- বেতন INT
- বয়স INT
- join_date DATE
এবং এইভাবে টাস্ক টেবিল , যা কর্মীদের জন্য কাজ ধারণ করে, এর মতো দেখায়:
আইডি | emploee_id | নাম | শেষ তারিখ |
---|---|---|---|
1 | 1 | ফ্রন্টএন্ডে একটি বাগ ঠিক করুন | 2022-06-01 |
2 | 2 | ব্যাকএন্ডে একটি বাগ ঠিক করুন | 2022-06-15 |
3 | 5 | কফি কিনুন | 2022-07-01 |
4 | 5 | কফি কিনুন | 2022-08-01 |
5 | 5 | কফি কিনুন | 2022-09-01 |
6 | (খালি) | অফিস পরিষ্কার করুন | (খালি) |
7 | 4 | জীবন উপভোগ করুন | (খালি) |
8 | 6 | জীবন উপভোগ করুন | (খালি) |
এই টেবিলে মাত্র 4টি কলাম রয়েছে:
- id টাস্কের অনন্য সংখ্যা (এবং টেবিলের সারি)।
- employee_id - কর্মচারী টেবিল থেকে কর্মচারীর আইডি যেটি টাস্কটি বরাদ্দ করা হয়েছে।
- নাম - টাস্কের নাম এবং বিবরণ।
- সময়সীমা - যে সময়টি কাজটি শেষ করতে হবে।
কর্মচারী টেবিলে একটি একক এন্ট্রি টাস্ক টেবিলের অনেক সারি দ্বারা উল্লেখ করা যেতে পারে। এই ধরনের টেবিল-স্তরের সম্পর্ককে এক-থেকে- অনেক বলা হয়।
জাভা ক্লাস লেভেলের সাথে সম্পর্ক
এবং আমাদের ক্লাস, কর্মচারী শ্রেণী :
@Entity
@Table(name="user")
class Employee {
@Column(name="id")
public Integer id;
@Column(name="name")
public String name;
@Column(name="occupation")
public String occupation;
@Column(name="salary")
public Integer salary;
@Column(name="join_date")
public Date join;
}
এবং EmployeeTask ক্লাস তার আসল আকারে:
@Entity
@Table(name="task")
class EmployeeTask {
@Column(name="id")
public Integer id;
@Column(name="name")
public String description;
@Column(name="employee_id")
public Integer employeeId;
@Column(name="deadline")
public Date deadline;
}
@OneToMany টীকা
আমরা ভিন্ন উপায়ে সত্তা ক্লাসের মধ্যে যোগাযোগের ব্যবস্থা করতে পারি।
@ElementCollection টীকাটি মনে আছে যা আমরা প্যারেন্ট ক্লাসে চাইল্ড অবজেক্টের একটি সংগ্রহ তৈরি করতে ব্যবহার করেছি? অনুরূপ কিছু @OneToMany টীকা দিয়ে করা যেতে পারে । শুধুমাত্র এই সময়, কর্মচারী শ্রেণী পরিবর্তন করা হবে :
@Entity
@Table(name="user")
class Employee {
@Column(name="id")
public Integer id;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "employee_id")
private Set<EmployeeTask> tasks = new HashSet<EmployeeTask>();
}
@OneToMany টীকা ব্যবহার করে , আমরা ইঙ্গিত করেছি যে বস্তুটিকর্মচারীঅনেক EmployeeTask বস্তু সংরক্ষণ করতে পারেন । এছাড়াও, @JoinColumn টীকা ব্যবহার করে , আমরা নির্দেশ করেছি যে টাস্ক টেবিলের কোন কলামে অবজেক্ট আইডি সংরক্ষণ করা হয়েছেকর্মচারী.
যাইহোক, EmployeeTask ক্লাসে সাধারণত এমন একটি ক্ষেত্র থাকে না যা কর্মচারী_আইডি কলামকে নির্দেশ করে। উদাহরণ:
@Entity
@Table(name="task")
class EmployeeTask {
@Column(name="id")
public Integer id;
@Column(name="name")
public String description;
@Column(name="deadline")
public Date deadline;
}
কর্মচারী_আইডি ক্ষেত্রটিকে একটি পরিষেবা ক্ষেত্র হিসাবে বিবেচনা করা হয় এবং এর মান হাইবারনেট দ্বারা নিয়ন্ত্রিত হয়।
উদাহরণ অনুরোধ করুন
আপনি যদি কিছু কর্মীর সাথে কিছু কাজ যোগ করতে চান, তাহলে আপনাকে এইরকম কোড লিখতে হবে:
EmployeeTask task1 = new EmployeeTask();
task1.description = "Do Something Important";
session.persist(task1);
EmployeeTask task2 = new EmployeeTask();
task2.description = "Nothing to do";
session.persist(task2);
session.flush();
Employee director = session.find(Employee.class, 4);
director.tasks.add(task1);
director.tasks.add(task2);
session.update(director);
session.flush();
প্রথমত, আমরা দুটি EmployeeTask অবজেক্ট তৈরি করি , সেগুলিকে ডাটাবেসে সংরক্ষণ করি এবং flush() পদ্ধতিতে কল করি যাতে INSERT অপারেশন সঞ্চালিত হয় এবং অবজেক্টের আইডি থাকে।
তারপরে আমরা ডাটাবেসে পরিচালককে খুঁজে পাই, তার কাছ থেকে টাস্ক ফিল্ডটি নিয়ে তার সাথে দুটি কাজ যোগ করি। তারপরে আমরা ডাটাবেসে পরিচালককে সংরক্ষণ করি। এর পরে, মান 4 নতুন কাজের জন্য ডাটাবেসে উপস্থিত হবে কর্মচারী_আইডি কলাম - কর্মচারী টেবিলে পরিচালকের আইডি।
গুরুত্বপূর্ণ ! ডাটাবেসের টেবিলগুলি @ManyToOne এবং @OneToMany টীকাগুলির জন্য একই । কিন্তু এই টেবিলের জন্য জাভা ক্লাস ভিন্ন।
GO TO FULL VERSION