দুটি এন্টিটির মধ্যে এক-এক সম্পর্ক হল এমন একটি সম্পর্ক যেখানে পেরেন্ট এন্টিটির প্রতিটি ইনস্ট্যান্স চাইল্ড এন্টিটির ঠিক একটি ইনস্ট্যান্সের সাথে সম্পর্কিত এবং এর বিপরীতটিও সত্য।
যেমন, মিউজিক স্ট্রিমিং অ্যাপের কথা বিবেচনা করুন যেখানে ব্যবহারকারীর কাছে তার মালিকানাধীন
গানের লাইব্রেরি আছে। প্রত্যেক ব্যবহারকারীর একটি করে লাইব্রেরি থাকে এবং প্রতিটি লাইব্রেরি
ঠিক একজন ব্যবহারকারীর সাথে সম্পর্কিত। তাই, User এন্টিটি ও Library এন্টিটির মধ্যে এক-থেকে-এক সম্পর্ক
রয়েছে।
আপনার ডেটাবেসে এক-এক সম্পর্ককে কোয়েরি ও ডিফাইন করতে এইসব ধাপ অনুসরণ করুন:
- সম্পর্কটি বর্ণনা করুন: দুটি এন্টিটির জন্য ক্লাস তৈরি করুন এবং নিশ্চিত করুন যে একটি এন্টিটি যেন অন্যটির প্রাইমারি কী রেফারেন্স করে।
- এনটিটি কোয়েরি করা: নতুন ডেটা ক্লাসে সম্পর্ক মডেল করুন, এবং সম্পর্কিত ডেটা রিট্রিভ করার জন্য ফাংশন তৈরি করুন।
সম্পর্কের সংজ্ঞা দাও
এক-থেকে-এক সম্পর্ককে সংজ্ঞায়িত করতে, প্রথমে আপনার দুটি এনটিটির প্রতিটির জন্য একটি করে ক্লাস তৈরি করুন। একটি এন্টিটিতে অবশ্যই এমন একটি ভেরিয়েবল থাকতে হবে যা অন্য এন্টিটির প্রাইমারি কী-কে রেফার করে।
@Entity data class User( @PrimaryKey val userId: Long, val name: String, val age: Int ) @Entity data class Library( @PrimaryKey val libraryId: Long, val userOwnerId: Long )
এন্টিটি কোয়েরি করা
ব্যবহারকারী ও সংশ্লিষ্ট লাইব্রেরির তালিকা কোয়েরি করতে, আপনাকে প্রথমে দুটি এন্টিটির মধ্যে এক-এক সম্পর্ক মডেল করতে হবে।
সম্পর্ক মডেল করতে, একটি নতুন ডেটা ক্লাস তৈরি করুন যেখানে প্রতিটি ইনস্ট্যান্স
পেরেন্ট এন্টিটি এবং সংশ্লিষ্ট চাইল্ড এন্টিটির একটি ইনস্ট্যান্স হোল্ড করে। চাইল্ড এন্টিটিতে
@Relation অ্যানোটেশন যোগ করুন। parentColumns-কে
প্যারেন্ট এন্টিটির প্রাইমারি কী কলামের নামে সেট করুন এবং
entityColumns-কে চাইল্ড এন্টিটির কলামের নামে সেট করুন যা প্যারেন্ট এন্টিটির
প্রাইমারি কী-কে রেফার করে।
data class UserAndLibrary( @Embedded val user: User, @Relation( parentColumns = ["userId"], entityColumns = ["userOwnerId"] ) val library: Library )
সবশেষে, ডেটা অ্যাক্সেস অবজেক্ট (DAO) ক্লাসে এমন একটি ফাংশন যোগ করুন যা ডেটা ক্লাসের সব
ইনস্ট্যান্স রিটার্ন করে যা পেরেন্ট এন্টিটিকে চাইল্ড
এন্টিটির সাথে পেয়ার করে। Room যাতে সম্পূর্ণ অপারেশনটি অ্যাটমিকভাবে পারফর্ম করতে পারে তা নিশ্চিত করতে @Transaction অ্যানোটেশন যোগ করুন, কারণ এই ফাংশনের জন্য Room-কে দুটি
কোয়েরি চালাতে হবে।
@Transaction @Query("SELECT * FROM User") suspend fun getUsersAndLibraries(): List<UserAndLibrary>
কম্পোজিট কী
আপনি কম্পোজিট কী ব্যবহার করে সম্পর্ক নির্ধারণ করলে, parentColumns এবং entityColumns-এ একাধিক কলাম
নির্দিষ্ট করুন।
parentColumns-এর কলামের ক্রম entityColumns-এর কলামের ক্রমের সাথে ম্যাচ করতে হবে।
@Entity(primaryKeys = ["firstName", "lastName"]) data class User( val firstName: String, val lastName: String, val age: Int ) @Entity data class Library( @PrimaryKey val libraryId: Long, val userFirstName: String, val userLastName: String ) data class UserAndLibrary( @Embedded val user: User, @Relation( parentColumns = ["firstName", "lastName"], entityColumns = ["userFirstName", "userLastName"] ) val library: Library )