এক-এক সম্পর্ককে সংজ্ঞায়িত করুন এবং জিজ্ঞাসা করুন

দুটি এনটিটির মধ্যে এক-এক সম্পর্ক হলো এমন একটি সম্পর্ক যেখানে প্যারেন্ট এনটিটির প্রতিটি ইনস্ট্যান্স চাইল্ড এনটিটির ঠিক একটি ইনস্ট্যান্সের সাথে সঙ্গতিপূর্ণ থাকে এবং এর বিপরীতটিও সত্য।

উদাহরণস্বরূপ, একটি মিউজিক স্ট্রিমিং অ্যাপের কথা ভাবুন যেখানে ব্যবহারকারীর নিজস্ব গানের একটি লাইব্রেরি থাকে। প্রত্যেক ব্যবহারকারীর কেবল একটিই লাইব্রেরি থাকে এবং প্রতিটি লাইব্রেরি ঠিক একজন ব্যবহারকারীর প্রতিনিধিত্ব করে। সুতরাং, User এনটিটি এবং Library এনটিটির মধ্যে একটি এক-এক সম্পর্ক বিদ্যমান।

আপনার ডাটাবেসে ওয়ান-টু-ওয়ান সম্পর্ক সংজ্ঞায়িত করতে এবং কোয়েরি করতে এই ধাপগুলো অনুসরণ করুন:

  1. সম্পর্কটি সংজ্ঞায়িত করুন : উভয় এনটিটির জন্য ক্লাস তৈরি করুন এবং নিশ্চিত করুন যে একটি এনটিটি অন্যটির প্রাইমারি কী-কে রেফারেন্স করে।
  2. এনটিটিগুলো কোয়েরি করুন : একটি নতুন ডেটা ক্লাসে সম্পর্কটি মডেল করুন এবং সম্পর্কিত ডেটা পুনরুদ্ধার করার জন্য একটি মেথড তৈরি করুন।

সম্পর্কটি সংজ্ঞায়িত করুন

এক-এক সম্পর্ক নির্ধারণ করতে, প্রথমে আপনার দুটি এনটিটির প্রতিটির জন্য একটি করে ক্লাস তৈরি করুন। এনটিটিগুলোর মধ্যে একটিতে অবশ্যই একটি ভেরিয়েবল অন্তর্ভুক্ত থাকতে হবে, যা অন্য এনটিটির প্রাইমারি কী-এর একটি রেফারেন্স হবে।

কোটলিন

@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
)

জাভা

@Entity
public class User {
    @PrimaryKey public long userId;
    public String name;
    public int age;
}

@Entity
public class Library {
    @PrimaryKey public long libraryId;
    public long userOwnerId;
}

সত্তাগুলো সম্পর্কে জিজ্ঞাসা করুন

ব্যবহারকারী এবং সংশ্লিষ্ট লাইব্রেরির তালিকা কোয়েরি করতে হলে, আপনাকে প্রথমে এই দুটি সত্তার মধ্যেকার এক-এক সম্পর্কটি মডেল করতে হবে।

এটি করার জন্য, একটি নতুন ডেটা ক্লাস তৈরি করুন যেখানে প্রতিটি ইনস্ট্যান্সে প্যারেন্ট এনটিটির একটি ইনস্ট্যান্স এবং চাইল্ড এনটিটির সংশ্লিষ্ট ইনস্ট্যান্স থাকবে। চাইল্ড এনটিটির ইনস্ট্যান্সে @Relation অ্যানোটেশনটি যোগ করুন, যেখানে parentColumn প্যারেন্ট এনটিটির প্রাইমারি কী কলামের নামে এবং entityColumn চাইল্ড এনটিটির সেই কলামের নামে সেট করুন যা প্যারেন্ট এনটিটির প্রাইমারি কী-কে রেফারেন্স করে।

কোটলিন

data class UserAndLibrary(
    @Embedded val user: User,
    @Relation(
         parentColumn = "userId",
         entityColumn = "userOwnerId"
    )
    val library: Library
)

জাভা

public class UserAndLibrary {
    @Embedded public User user;
    @Relation(
         parentColumn = "userId",
         entityColumn = "userOwnerId"
    )
    public Library library;
}

অবশেষে, DAO ক্লাসে এমন একটি মেথড যোগ করুন যা প্যারেন্ট এনটিটি এবং চাইল্ড এনটিটিকে জোড়া দেয় এমন ডেটা ক্লাসের সমস্ত ইনস্ট্যান্স রিটার্ন করে। এই মেথডটি চালানোর জন্য দুটি কোয়েরির প্রয়োজন হয়। তাই আপনার এই মেথডে @Transaction অ্যানোটেশনটি যোগ করা উচিত। এটি নিশ্চিত করে যে সম্পূর্ণ অপারেশনটি অ্যাটমিকভাবে চলে।

কোটলিন

@Transaction
@Query("SELECT * FROM User")
fun getUsersAndLibraries(): List<UserAndLibrary>

জাভা

@Transaction
@Query("SELECT * FROM User")
public List<UserAndLibrary> getUsersAndLibraries();