Entity হল একটি জাভা ক্লাস যা ডেটাবেসের একটি টেবিলের সাথে ম্যাপ করা হয়। JPA (Java Persistence API)-তে Entity ক্লাসগুলি ডেটাবেস টেবিলের রেকর্ডগুলির জন্য জাভা অবজেক্ট তৈরি করে এবং এটি ORM (Object-Relational Mapping) প্রযুক্তি ব্যবহার করে ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করে। স্প্রিং বুট JPA ব্যবহারের সময়, @Entity অ্যানোটেশন ব্যবহার করে আপনি একটি ক্লাসকে Entity হিসেবে চিহ্নিত করেন, এবং JPA সিস্টেম ঐ Entity ক্লাসের সাহায্যে টেবিলের ডেটা ম্যানেজ করে।
Entity এর মৌলিক ধারণা
একটি Entity ক্লাস জাভাতে একটি ক্লাস যা @Entity অ্যানোটেশন দ্বারা চিহ্নিত করা হয় এবং এটি ডেটাবেস টেবিলের সাথে সম্পর্কযুক্ত থাকে। প্রতিটি Entity ক্লাসের একটি primary key থাকে, যা ঐ টেবিলের প্রতিটি রেকর্ডকে অনন্যভাবে চিহ্নিত করে। Entity ক্লাসের ফিল্ডগুলি ডেটাবেস টেবিলের কলামের সাথে সম্পর্কিত থাকে।
স্প্রিং বুট JPA Hibernate বা অন্য কোন JPA প্রোভাইডার ব্যবহার করে Entity ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করে।
Entity Class এবং Table Mapping
স্প্রিং বুট JPA ব্যবহারে Entity ক্লাস একটি ডেটাবেস টেবিলের প্রতিনিধিত্ব করে এবং JPA স্বয়ংক্রিয়ভাবে Entity ক্লাসের ফিল্ডগুলোকে টেবিলের কলাম হিসেবে ম্যাপ করে। এই ম্যাপিং @Entity, @Id, @Column ইত্যাদি অ্যানোটেশন ব্যবহার করে করা হয়।
Entity Class তৈরি এবং Table Mapping উদাহরণ
ধরা যাক, আমরা একটি Product টেবিল তৈরি করতে চাই যেখানে Product এর id, name, এবং price থাকবে।
1. Entity Class তৈরি করা
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Column;
@Entity // Marks the class as a JPA entity
public class Product {
@Id // Marks this field as the primary key
private Long id;
@Column(name = "name") // Maps the 'name' field to the 'name' column in the database
private String name;
@Column(name = "price") // Maps the 'price' field to the 'price' column in the database
private Double price;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}
ব্যাখ্যা:
@Entity: এটি ক্লাসটিকে JPA Entity হিসেবে চিহ্নিত করে, যার মাধ্যমে এটি ডেটাবেস টেবিলের প্রতিনিধিত্ব করবে।@Id: এটি Entity ক্লাসের primary key চিহ্নিত করে।@Column: এই অ্যানোটেশনটি ব্যবহার করা হয় ডেটাবেস টেবিলের কলামের সাথে Entity ক্লাসের ফিল্ড ম্যাপ করতে।
Entity Table Mapping অটোমেটিক
স্প্রিং বুট JPA দ্বারা Entity ক্লাসের ফিল্ড গুলো ডেটাবেস টেবিলের কলামের সাথে স্বয়ংক্রিয়ভাবে ম্যাপ হয়ে যায়, তবে আপনি চাইলে @Column অ্যানোটেশন দিয়ে কাস্টম কলাম নাম এবং অন্যান্য বৈশিষ্ট্য নির্ধারণ করতে পারেন।
2. ডেটাবেস টেবিলের সাথে Entity ক্লাস Mapping
এখন স্প্রিং বুট JPA আপনাকে Hibernate ব্যবহার করে ডেটাবেস টেবিল তৈরি করতে সহায়তা করবে। টেবিলটির নাম সাধারণত Entity ক্লাসের নামের সাথে সম্পর্কিত থাকে, তবে আপনি @Table অ্যানোটেশন ব্যবহার করে কাস্টম টেবিল নামও নির্ধারণ করতে পারেন।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "products") // Mapping to the 'products' table in the database
public class Product {
@Id
private Long id;
private String name;
private Double price;
// Getters and setters
}
ব্যাখ্যা:
@Table(name = "products"): এটি ডেটাবেসে টেবিলের নামproductsসেট করে, যেখানে Entity মডেলটির ডেটা সঞ্চিত হবে।
Entity Class এবং Table Mapping কনফিগারেশন
স্প্রিং বুট JPA এর সাহায্যে Entity ক্লাস এবং Table এর ম্যাপিং স্বয়ংক্রিয়ভাবে ডেটাবেসে চলে আসে, তবে কিছু কনফিগারেশন পরিবর্তন করলে আপনি DDL অটোমেটিকালি জেনারেট করতে পারেন।
3. application.properties ফাইলে কনফিগারেশন
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
ব্যাখ্যা:
spring.jpa.hibernate.ddl-auto=update: এই কনফিগারেশনটি Hibernate কে নির্দেশ দেয় যে ডেটাবেসের স্কিমা আপডেট করা উচিত যদি Entity ক্লাসের সাথে কোনো পরিবর্তন হয়।spring.jpa.show-sql=true: Hibernate-generated SQL কুয়েরিগুলি কনসোলে প্রদর্শন করতে সহায়তা করে।
Entity এবং Table Mapping এর অন্যান্য অ্যানোটেশন
@GeneratedValue: প্রাইমারি কিলামের জন্য অটোমেটিক ভ্যালু জেনারেট করতে ব্যবহৃত হয়।
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;@OneToMany, @ManyToOne, @OneToOne, @ManyToMany: এই অ্যানোটেশনগুলো ব্যবহার করে আপনি বিভিন্ন Entity গুলোর মধ্যে সম্পর্ক (Relationship) গড়ে তুলতে পারেন, যেমন এক থেকে অনেক (OneToMany) অথবা অনেক থেকে এক (ManyToOne) সম্পর্ক।
@OneToMany(mappedBy = "product") private List<Order> orders;@Transient: যদি কোনো ফিল্ডকে ডেটাবেস টেবিলের সাথে ম্যাপ না করতে চান, তাহলে @Transient অ্যানোটেশন ব্যবহার করা হয়।
@Transient private String temporaryField;
উপসংহার
Entity ক্লাস জাভাতে ডেটাবেস টেবিলের প্রতিনিধিত্ব করে এবং স্প্রিং বুট JPA-এর মাধ্যমে ORM (Object-Relational Mapping) প্রক্রিয়া সম্পন্ন হয়। JPA Entity ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করা হয় @Entity, @Table, @Id, @Column এবং অন্যান্য অ্যানোটেশন ব্যবহার করে। স্প্রিং বুট JPA ডেটাবেসে CRUD অপারেশন সহজ করে তোলে এবং উন্নত কনফিগারেশন ফিচার সরবরাহ করে, যা ডেটাবেস ইন্টিগ্রেশন আরও কার্যকরী ও সহজ করে তোলে।
Read more