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

দুটি এনটিটির মধ্যে এক-থেকে-অনেক সম্পর্ক হলো এমন একটি সম্পর্ক যেখানে প্যারেন্ট এনটিটির প্রতিটি ইনস্ট্যান্স চাইল্ড এনটিটির শূন্য বা তার বেশি সংখ্যক ইনস্ট্যান্সের সাথে সম্পর্কিত থাকে, কিন্তু চাইল্ড এনটিটির প্রতিটি ইনস্ট্যান্স প্যারেন্ট এনটিটির ঠিক একটি মাত্র ইনস্ট্যান্সের সাথে সম্পর্কিত হতে পারে।

মিউজিক স্ট্রিমিং অ্যাপের উদাহরণে, ধরা যাক ব্যবহারকারীর তার গানগুলোকে প্লেলিস্টে সাজানোর ক্ষমতা আছে। প্রত্যেক ব্যবহারকারী যত খুশি প্লেলিস্ট তৈরি করতে পারে, কিন্তু প্রতিটি প্লেলিস্ট ঠিক একজন ব্যবহারকারীই তৈরি করে। সুতরাং, User এনটিটি এবং Playlist এনটিটির মধ্যে একটি ওয়ান-টু-মেনি সম্পর্ক বিদ্যমান।

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

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

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

এক-থেকে-অনেক সম্পর্ক (one-to-many relationship) সংজ্ঞায়িত করতে, প্রথমে দুটি এনটিটির জন্য একটি ক্লাস তৈরি করুন। এক-থেকে-এক সম্পর্কের (one-to-one relationship) মতোই, চাইল্ড এনটিটিতে অবশ্যই একটি ভেরিয়েবল অন্তর্ভুক্ত থাকতে হবে, যা প্যারেন্ট এনটিটির প্রাইমারি কী-এর একটি রেফারেন্স।

কোটলিন

@Entity
data class User(
    @PrimaryKey val userId: Long,
    val name: String,
    val age: Int
)

@Entity
data class Playlist(
    @PrimaryKey val playlistId: Long,
    val userCreatorId: Long,
    val playlistName: String
)

জাভা

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

@Entity
public class Playlist {
    @PrimaryKey public long playlistId;
    public long userCreatorId;
    public String playlistName;
}

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

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

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

কোটলিন

data class UserWithPlaylists(
    @Embedded val user: User,
    @Relation(
          parentColumn = "userId",
          entityColumn = "userCreatorId"
    )
    val playlists: List<Playlist>
)

জাভা

public class UserWithPlaylists {
    @Embedded public User user;
    @Relation(
         parentColumn = "userId",
         entityColumn = "userCreatorId"
    )
    public List<Playlist> playlists;
}

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

কোটলিন

@Transaction
@Query("SELECT * FROM User")
fun getUsersWithPlaylists(): List<UserWithPlaylists>

জাভা

@Transaction
@Query("SELECT * FROM User")
public List<UserWithPlaylists> getUsersWithPlaylists();