CodeGym/Java Course/All lectures for BN purposes/প্রাথমিক কী

প্রাথমিক কী

বিদ্যমান

@আইডি টীকা

হাইবারনেটের প্রতিটি সত্তার একটি ক্ষেত্র থাকতে হবে যা প্রাথমিক কী হবে: এতে এই শ্রেণীর সমস্ত বস্তুর জন্য একটি অনন্য মান রয়েছে। সাধারণত, এই ক্ষেত্রটি @Id টীকা দিয়ে টীকা করা হয় ।

সাধারণ ফর্ম:

@Id
Class Name;

উদাহরণ:

@Entity
@Table(name="user")
class User
{
   @Id
   @Column(name="id")
   public Integer id;

   @Embedded
   public UserAddress address;

   @Column(name="created_date")
   public Date createdDate;
}

টীকা বসানো

যাইহোক, আপনি @কলাম টীকা লিখতে পারেন শুধুমাত্র ক্ষেত্রগুলির জন্য নয়, পদ্ধতিগুলির জন্যও: গেটার বা সেটারের জন্য। উদাহরণ:

@Entity
@Table(name="user")
class User
{
    public Integer id;
    public Date createdDate;

   @Id
   @Column(name="id")
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   @Column(name="created_date")
   public Date getDate() {
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
      this. createdDate = date;
   }
}

এই পদ্ধতিটি উপস্থিত হয়েছিল যখন টীকাগুলি কেবল ক্লাসে নয়, ইন্টারফেসেও যোগ করা শুরু হয়েছিল। ইন্টারফেসের ক্লাস ক্ষেত্র নেই, তবে পদ্ধতি রয়েছে: গেটার এবং সেটার্স। হাইবারনেট এই উভয় মানকে সমর্থন করে।

গুরুত্বপূর্ণ ! যদি একটি ক্লাসে @Entity টীকা থাকে , তাহলে এর সমস্ত ক্ষেত্র হাইবারনেট দ্বারা স্থায়ী ক্ষেত্র হিসাবে বিবেচিত হয় (যদি না তাদের @Transient টীকাটি নির্দিষ্ট করা থাকে )। এমনকি যদি ক্ষেত্রগুলিতে কোনও টীকা না থাকে: এই ক্ষেত্রে, কলামের নামটি ক্লাস ক্ষেত্রের নামের সমান হিসাবে বিবেচিত হয়।

এখানেই @Id টীকা একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। যদি টীকাটি একটি শ্রেণীর ক্ষেত্রে স্থাপন করা হয়, তাহলে হাইবারনেট ক্ষেত্রগুলির নাম এবং প্রকারগুলি দেখবে। যদি @Id টীকাটি একটি পদ্ধতিতে স্থাপন করা হয়, তাহলে হাইবারনেট পদ্ধতিগুলির নাম এবং প্রকারগুলি দেখবে।

উদাহরণ 1:

@Entity
@Table(name="user")
class User
{
   @Id
    public Integer id;
    public Date createdDate;  //this field will be treated as if it had @Column(name=" createdDate ")

}

উদাহরণ 2:

@Entity
@Table(name="user")
class User
{
    public Integer id;
    public Date createdDate;

   @Id
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   public Date getDate() { //this field will be treated as if it had @Column(name=”date ”)
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
  	this. createdDate = date;
   }

}

@GeneratedValue টীকা

আপনি নিজের নতুন বস্তুর জন্য একটি আইডি বরাদ্দ করতে পারেন, অথবা হাইবারনেটের করুণায় রেখে দিতে পারেন। আপনার অবজেক্টে কীভাবে আইডি বরাদ্দ করতে হয় তা হাইবারনেটকে আরও ভালভাবে বোঝার জন্য, এটির একটি বিশেষ টীকা রয়েছে:

@GeneratedValue

এই টীকাটি সাধারণত @Id টীকা হিসাবে একই ক্ষেত্র চিহ্নিত করে । তার 4টি সম্ভাব্য আইডি অ্যাসাইনমেন্ট কৌশল রয়েছে:

  • অটো
  • পরিচয়
  • ক্রম
  • টেবিল

নির্দিষ্ট কৌশল সহ একটি টীকা একটি উদাহরণ:

@Entity
@Table(name="user")
class User
{
    @Id
	@GeneratedValue(strategy = GenerationType.AUTO)
    public Integer id;

    public Date createdDate;
}

যদি কোনো নীতির মান নির্দিষ্ট করা না থাকে, তাহলে AUTO কৌশল নির্বাচন করা হবে। AUTO কৌশল মানে হাইবারনেট নিজেই আইডি বরাদ্দ করবে, প্রাথমিকভাবে আইডি ক্ষেত্রের ডেটা টাইপের উপর ভিত্তি করে।

কেন টাইপ উপর? হ্যাঁ, কারণ ID প্রকারগুলি খুব আলাদা হতে পারে, উদাহরণস্বরূপ, স্ট্রিং বা GUID৷ উদাহরণ:

@Entity
@Table(name="user")
class User
{
    @Id
	@GeneratedValue
    public UUID id;

    public Date createdDate;
}

দ্রষ্টব্য: জাভাতে একটি GUID কে একটি UUID বলা হয়, ঐতিহাসিকভাবে বলতে গেলে। এবং হাইবারনেট আপনার বস্তুর জন্য অনন্য UUID তৈরি করতে পারে যদি আপনি এটি করতে বলেন।

বিভিন্ন @GeneratedValue কৌশল

আপনি যদি GeneratedValue(strategy = GenerationType.IDENTITY) প্রকারটি নির্দিষ্ট করেন , তাহলে হাইবারনেট আইডি সেটিংটি ডেটাবেস স্তরে অর্পণ করে। সাধারণত, এটি প্রাথমিক কী, অটোইনক্রিমেন্ট লেবেলযুক্ত একটি কলাম ব্যবহার করে।

কিন্তু আপনি যদি চান আপনার আইডিগুলি অনন্য এবং একটি বিশেষভাবে নির্দিষ্ট অ্যালগরিদম অনুযায়ী তৈরি করা হোক, তাহলে আপনি GeneratedValue(strategy = GenerationType.SEQUENCE) টীকা ব্যবহার করতে পারেন , উদাহরণস্বরূপ:

@Entity
@Table(name="user")
public class User {
	@Id
	@GeneratedValue(generator = "sequence-generator")
	@GenericGenerator(
  	name = "sequence-generator",
  	strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
  	parameters = {
    	@Parameter(name = "sequence_name", value = "user_sequence"),
    	@Parameter(name = "initial_value", value = "4"),
    	@Parameter(name = "increment_size", value = "1")
    	}
	)
	private long userId;

	// ...
}

আইডি তৈরি করার আরও অনেক উপায় আছে। উদাহরণস্বরূপ, আপনার কাছে কয়েকটি কলাম সমন্বিত একটি যৌগিক অনন্য কী থাকতে পারে। এবং ডাটাবেসে একটি বস্তু লেখার সময়, আপনাকে এই সমস্ত কলামগুলি পূরণ করতে হবে।

আমি তাদের বিস্তারিত দেব না। তবুও, আমাদের বক্তৃতাগুলির উদ্দেশ্য হল হাইবারনেটের সাথে পরিচিত হওয়া, এবং অফিসিয়াল ডকুমেন্টেশনগুলি পুনরায় বলা নয়।

মন্তব্য
  • জনপ্রিয়
  • নতুন
  • পুরানো
মন্তব্য লেখার জন্য তোমাকে অবশ্যই সাইন ইন করতে হবে
এই পাতায় এখনও কোনো মন্তব্য নেই