এক থেকে অনেকের মধ্যে, একাধিক থেকে এক এবং অনেকের মধ্যে অনেকের মধ্যে পার্থক্য?


144

ঠিক আছে সুতরাং এটি সম্ভবত একটি তুচ্ছ প্রশ্ন তবে আমি পার্থক্যটি দেখতে এবং বুঝতে এবং কখন ব্যবহার করতে হবে তা বুঝতে সমস্যা হচ্ছে। আমি একচেটিয়া / বহু থেকে বহু সম্পর্ককে কীভাবে দ্বি-দিকনির্দেশক এবং দ্বি-দিকনির্দেশক ম্যাপিংয়ের মতো ধারণাগুলি প্রভাবিত করে সে সম্পর্কে আমিও কিছুটা অস্পষ্ট। আমি এখনই হাইবারনেট ব্যবহার করছি সুতরাং ওআরএম সম্পর্কিত যে কোনও ব্যাখ্যা সহায়ক হবে।

উদাহরণ হিসাবে ধরা যাক আমার নিম্নলিখিত সেটআপ আছে:

public class Person{
    private Long personId;
    private Set<Skill> skills;
    //Getters and setters
}

public class Skill{
    private Long skillId;
    private String skillName;
    //Getters and setters
}

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


11
দেখে মনে হচ্ছে প্রত্যেকে কেবল একের মধ্যে বহু বনাম বহু থেকে বহুকে উত্তর দিচ্ছে। একের থেকে বহু বনাম বহু-একের জন্য আমার উত্তরটি দেখুন।
আলেকজান্ডার সুর্যাপেল

উত্তর:


165

এক-থেকে- এক: এক ব্যক্তির অনেক দক্ষতা রয়েছে, কোনও ব্যক্তির মধ্যে দক্ষতা পুনরায় ব্যবহার করা হয় না

  • একমুখী : এক ব্যক্তি সরাসরি তার সেটের মাধ্যমে দক্ষতার উল্লেখ করতে পারে
  • দ্বি নির্দেশমূলক : প্রতিটি "শিশু" দক্ষতার একক পয়েন্টার ব্যক্তির কাছে থাকে (যা আপনার কোডে প্রদর্শিত হয় না)

অনেকগুলি থেকে বহু : এক ব্যক্তির অনেক দক্ষতা থাকে, ব্যক্তি (গুলি) এর মধ্যে একটি দক্ষতা পুনরায় ব্যবহৃত হয়

  • একমুখী : এক ব্যক্তি সরাসরি তার সেটের মাধ্যমে দক্ষতার উল্লেখ করতে পারে
  • দ্বি নির্দেশমূলক : একটি দক্ষতার সাথে এমন ব্যক্তির একটি সেট থাকে যা এর সাথে সম্পর্কিত।

একের সাথে একাধিক সম্পর্কের ক্ষেত্রে একটি বস্তু হ'ল "পিতামাতা" এবং একটি "শিশু" child পিতা-মাতা সন্তানের অস্তিত্ব নিয়ন্ত্রণ করে। বহু-বহুতে, উভয় প্রকারের অস্তিত্ব উভয়ের বাইরের কোনও কিছুর উপর নির্ভর করে (বৃহত্তর প্রয়োগের প্রসঙ্গে)।

আপনার বিষয় (ডোমেন) নির্ধারণ করা উচিত যে সম্পর্কটি এক-একাধিক বা বহু-বহু-বহু সম্পর্কযুক্ত কিনা - তবে, আমি দেখতে পেয়েছি যে সম্পর্কটিকে দিকনির্দেশক বা দ্বিদ্বিপার্জনীয় করে তোলা এমন একটি ইঞ্জিনিয়ারিং সিদ্ধান্ত যা স্মৃতি, প্রক্রিয়াজাতকরণ, কার্য সম্পাদনকে ছাড়িয়ে যায় ইত্যাদি

বিভ্রান্তিকর কি হতে পারে যে একাধিক দ্বিপাক্ষিক সম্পর্কের জন্য প্রতিসম প্রয়োজন হয় না! অর্থাৎ, একগুচ্ছ লোক একটি দক্ষতার দিকে ইঙ্গিত করতে পারে, তবে দক্ষতার সাথে কেবল সেই লোকগুলির সাথে সম্পর্কিত হওয়ার দরকার নেই। সাধারণত এটি হবে, তবে এই জাতীয় প্রতিসাম্য প্রয়োজন হয় না। ভালবাসা নিন, উদাহরণস্বরূপ - এটি দ্বি-দিকনির্দেশক ("আই-লাভ", "ভালবাসা-আমাকে"), তবে প্রায়শই অসম্পূর্ণ ("আমি তাকে ভালবাসি, তবে সে আমাকে ভালবাসে না")!

এগুলি সবই হাইবারনেট এবং জেপিএ দ্বারা ভালভাবে সমর্থিত। কেবল মনে রাখবেন যে হাইবারনেট বা অন্য কোনও ওআরএম দ্বি-দিকীয়-বহু-বহু সম্পর্কের পরিচালনা করার সময় প্রতিসাম্য বজায় রাখার বিষয়ে একটি হুট দেয় না ... অ্যাপ্লিকেশন পর্যন্ত এটি স্থায়ী।


স্পষ্ট করার জন্য, যে কোনও সম্পর্ক আপনার বিএল বা আপনার ও / আর ম্যাপিংয়ে (একে অপরের থেকে স্বতন্ত্রভাবে এমনকি এমনকি!) দ্বি-দিকীয় হতে পারে al
জৈঙ্গদেব

4
"প্রেম" উদাহরণটি কেবল এটি পরিষ্কার করেছে rif ম্যান্টিটোম্যান আমার ম্যাপিংয়ের ধরণ।
আব্দুল্লাহ খান

1
সুপার. এটি এটিকে এত ভালভাবে ব্যাখ্যা করেছে (এবং
অনুপম

1
প্রশ্নের সঠিক উত্তর দেয় না। আপনি এক অংশ অনেক মিস। যদিও একের অনেকের কাছে এবং অনেকের কাছে এই ধারণার উল্লেখ নেই।
মনজুর আলাহী

248

সবাই মত দেখায় উত্তর দিচ্ছে One-to-manyবনামMany-to-many :

মধ্যে পার্থক্য One-to-many, Many-to-oneএবং Many-to-Manyহল:

One-to-manyবনাম Many-to-oneদৃষ্টিভঙ্গির বিষয়Unidirectionalবনাম Bidirectionalম্যাপিংয়ের উপর প্রভাব ফেলবে না তবে কীভাবে আপনি আপনার ডেটা অ্যাক্সেস করতে পারবেন তার মধ্যে পার্থক্য আনবে।

  • ইন দিকে রেফারেন্স রাখতে হবে পাশ। একটি ভাল উদাহরণ "একটি রাজ্য শহর আছে"। এই ক্ষেত্রে এক দিকে এবং অনেক দিক আছে। টেবিলে একটি কলাম থাকবে ।Many-to-onemanyoneStateCitystate_idcities

ইন একমুখী , Personবর্গ থাকবে List<Skill> skillsকিন্তু Skillথাকবে না Person person। ইন দ্বিমুখী উভয় বৈশিষ্ট্য যোগ করা হয় এবং এর জন্য আপনাকে অ্যাক্সেসের অনুমতি দেয় Personএকটি দক্ষতা (যেমন দেওয়া skill.person)।

  • ইন One-to-Manyএকপাশে রেফারেন্স আমাদের বিন্দু হতে হবে। উদাহরণস্বরূপ, "একজন ব্যবহারকারীর একটি ঠিকানা রয়েছে"। এই ক্ষেত্রে আমরা তিনটি কলাম থাকতে পারে address_1_id, address_2_idএবং address_3_idবা টেবিল খোঁজা উপর অনন্য বাধ্যতা সঙ্গে user_idএবং address_id

ইন একমুখী , একটি Userথাকবে Address addressদ্বিমুখী একটি অতিরিক্ত থাকবে List<User> usersমধ্যে Addressবর্গ।

  • ইন Many-to-Manyপ্রত্যেক দলের সদস্যদের অপরপক্ষের সদস্যদের নির্বিচারে সংখ্যা রেফারেন্স ধরে রাখতে পারেন। এটি অর্জনের জন্য একটি চেহারা আপ টেবিল ব্যবহার করা হয়। এর উদাহরণ হ'ল চিকিত্সক এবং রোগীদের মধ্যে সম্পর্ক। একজন ডাক্তার অনেক রোগী এবং তদ্বিপরীত থাকতে পারে।

27
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, অন্যান্য উত্তরগুলির বেশিরভাগই প্রশ্নটি মিস করে।
arg20

প্রথম উদাহরণটি ভুল। আপনার যদি একজন ব্যক্তি এবং ব্যক্তির @OneToMany সাথে দক্ষতা থাকে তবে সেই টেবিলে প্রেসন_স্কিলের দক্ষতা_আইডিতে একটি অনন্য বাধা থাকবে। সুতরাং একটি দক্ষতা কেবল একজন ব্যক্তির কাছে ম্যাপ করা হবে। এবং আপনি নিষ্কাশন করতে পারবেন না s.persons, যেমন কেবল আছেs.person
Николайчук Николайчук

প্রকৃতপক্ষে যে One-to-manyসম্পর্কটি আপনি বর্ণনা করেছেন তা Many-to-manyসম্পর্ক হ'ল কারণ personঅনেকের কাছে একটি উল্লেখ রয়েছে skillsতবে skillনির্দিষ্ট ব্যক্তির সাথে রেফারেন্স রাখে না এবং অনেকেরই personsএকই রেফারেন্স থাকতে পারে skill। আপনার Many-to-oneসম্পর্কটি হ'ল One-to-manyকারণ প্রতিটি দক্ষতার কেবল একটিরই উল্লেখ রয়েছে কারণ personসন্তানের একমাত্র মা থাকে।
মিশ্র

@ মিক্সেল আপনার মন্তব্যটি আমাকে আমার বেশিরভাগ উত্তর পুনরায় লেখার জন্য তৈরি করেছে। আবার পরীক্ষা করে দেখুন! ধন্যবাদ
আলেকজান্ডার সুর্যাপেল

আপনি "এক" পক্ষের তাত্পর্য অনুসারে ওয়ান-টু-ওয়ান এবং বহু-থেকে-একের মধ্যে পার্থক্য করেন। উভয় উদাহরণে "ব্যবহারকারী" সর্বাধিক উল্লেখযোগ্য সত্তা। সুতরাং যখন এটি "ওয়ান" উপর (ব্যবহারকারী এবং দক্ষতা skillsরয়েছে person_idতারপর আপনি অনেক One-টু-সেটিতে কল কিন্তু যখন এটা এক "অনেক" সাইড (ব্যবহারকারী এবং ঠিকানা, থাকবে) usersহয়েছে address_id) তাহলে তুমি এটাকে অনেকে টু করুন। তবে কাঠামোগতভাবে উভয় কেস অভিন্ন এবং এক থেকে বহু বলা হয়।
মিক্সেল

38

1) চেনাশোনাগুলি হ'ল সত্ত্বা / পোগো / মটরশুটি

2) ডিগ্রি গ্রাফের মতো ডিগ্রির সংক্ষেপণ (প্রান্ত সংখ্যা)

পিকে = প্রাথমিক কী, এফকে = বিদেশী কী

ডিগ্রি এবং পাশের নামের মধ্যে দ্বন্দ্বটি নোট করুন। অনেকগুলি ডিগ্রি = 1 এর সাথে সম্পর্কিত তবে একটি ডিগ্রি> 1 এর সাথে মিল।

এক থেকে বহু অনেকের কাছে উদাহরণ


1
সত্যিই এটি কীভাবে এটি উভয় দিকের টেবিলগুলির সাথে বস্তুর গ্রাফকে যুক্ত করে।
দিমিত্রি মিনকভস্কি

3
লুক একরোখা প্রযুক্তিবিদের, এই হল কিভাবে প্রোগ্রামার এর হস্তাক্ষর মত দেখাচ্ছে: ডি
Mehraj মালিক

আমি এখানে আপনি কি করেছেন দেখুন।
নিক গ্যালিমোর

8

এই নিবন্ধটি একবার দেখুন: অবজেক্ট সম্পর্ক ম্যাপিং

ম্যাপিংয়ের সময় আপনার সাথে দুটি বিষয় সম্পর্কিত সম্পর্ক থাকতে হবে। প্রথম বিভাগটি বহুগতির উপর ভিত্তি করে এবং এতে তিন প্রকার অন্তর্ভুক্ত রয়েছে:

*One-to-one relationships.  This is a relationship where the maximums of each of its multiplicities is one, an example of which is holds relationship between Employee and Position in Figure 11.  An employee holds one and only one position and a position may be held by one employee (some positions go unfilled).
*One-to-many relationships. Also known as a many-to-one relationship, this occurs when the maximum of one multiplicity is one and the other is greater than one.  An example is the works in relationship between Employee and Division.  An employee works in one division and any given division has one or more employees working in it.
*Many-to-many relationships. This is a relationship where the maximum of both multiplicities is greater than one, an example of which is the assigned relationship between Employee and Task.  An employee is assigned one or more tasks and each task is assigned to zero or more employees. 

দ্বিতীয় বিভাগটি দিকনির্দেশনার উপর ভিত্তি করে এবং এতে দুটি প্রকার, ইউনি-দিকনির্দেশক সম্পর্ক এবং দ্বি-দিকনির্দেশক সম্পর্ক রয়েছে।

*Uni-directional relationships.  A uni-directional relationship when an object knows about the object(s) it is related to but the other object(s) do not know of the original object.  An example of which is the holds relationship between Employee and Position in Figure 11, indicated by the line with an open arrowhead on it.  Employee objects know about the position that they hold, but Position objects do not know which employee holds it (there was no requirement to do so).  As you will soon see, uni-directional relationships are easier to implement than bi-directional relationships.
*Bi-directional relationships.  A bi-directional relationship exists when the objects on both end of the relationship know of each other, an example of which is the works in relationship between Employee and Division.  Employee objects know what division they work in and Division objects know what employees work in them. 

2
this occurs when the maximum of one multiplicity is one and the other is greater than onelolwut?
সার্জ

3

এটি একটি খুব সাধারণ প্রশ্ন, সুতরাং এই উত্তরটি আমার ব্লগে আমার লেখা নিবন্ধের ভিত্তিতে তৈরি ।

এক থেকে অনেক

একের সাথে একাধিক টেবিলের সম্পর্কটি নীচে দেখায়:

এক থেকে অনেক

একটি রিলেশনাল ডাটাবেস সিস্টেমে, এক-একাধিক টেবিলের সম্পর্কটি Foreign Keyসন্তানের কলামের উপর ভিত্তি করে দুটি টেবিলের লিঙ্ক করে যা উল্লেখ করেPrimary Key পিতামাতার সারণির সারিটির ।

উপরে টেবিল ডায়াগ্রাম সালে post_idকলাম post_commentটেবিল একটি হয়েছে Foreign Keyসঙ্গে সম্পর্ক postটেবিল আইডি Primary Keyকলাম:

ALTER TABLE
    post_comment
ADD CONSTRAINT
    fk_post_comment_post_id
FOREIGN KEY (post_id) REFERENCES post

পছন্দ করুন

একের মধ্যে একাধিক টেবিল সম্পর্কের মানচিত্রের সর্বোত্তম উপায় হ'ল ব্যবহার করা @ManyToOne টীকাটি ।

আমাদের ক্ষেত্রে, শিশু সত্তা, টীকাটি ব্যবহার করে বিদেশী কী কলামটি PostCommentমানচিত্র করে :post_id@ManyToOne

@Entity(name = "PostComment")
@Table(name = "post_comment")
public class PostComment {

    @Id
    @GeneratedValue
    private Long id;

    private String review;

    @ManyToOne(fetch = FetchType.LAZY)
    private Post post;

}

জেপিএ ব্যবহার করে @OneToMany টিকা

আপনার কাছে @OneToManyটীকাটি ব্যবহার করার বিকল্প রয়েছে বলে এর অর্থ এই নয় যে এটি প্রতিটি এক থেকে একাধিক ডাটাবেসের সম্পর্কের জন্য ডিফল্ট বিকল্প হওয়া উচিত । সংগ্রহে সমস্যা হ'ল আমরা কেবল তখনই ব্যবহার করতে পারি যখন শিশু রেকর্ডের সংখ্যাটি বরং সীমাবদ্ধ থাকে।

@OneToManyঅ্যাসোসিয়েশন ম্যাপ করার সর্বোত্তম উপায় হ'ল @ManyToOneসমস্ত সত্তার স্থিতির পরিবর্তনগুলি প্রচার করার জন্য পক্ষে নির্ভর করা :

@Entity(name = "Post")
@Table(name = "post")
public class Post {

    @Id
    @GeneratedValue
    private Long id;

    private String title;

    @OneToMany(
        mappedBy = "post", 
        cascade = CascadeType.ALL, 
        orphanRemoval = true
    )
    private List<PostComment> comments = new ArrayList<>();

    //Constructors, getters and setters removed for brevity

    public void addComment(PostComment comment) {
        comments.add(comment);
        comment.setPost(this);
    }

    public void removeComment(PostComment comment) {
        comments.remove(comment);
        comment.setPost(null);
    }
}

অভিভাবক সত্তা, Postদুটি ইউটিলিটি পদ্ধতি (উদাহরণস্বরূপ ) addCommentএবং removeCommentযা দ্বিদলীয় অ্যাসোসিয়েশনের উভয় পক্ষকে সিঙ্ক্রোনাইজ করতে ব্যবহৃত হয় features আপনি যখনই দ্বিপাক্ষিক সংস্থার সাথে কাজ করছেন তখন আপনার সর্বদা এই পদ্ধতিগুলি সরবরাহ করা উচিত, অন্যথায়, আপনি খুব সূক্ষ্ম রাষ্ট্র প্রচারের ঝুঁকি নিয়ে থাকেন

দ্বি- নির্দেশমূলক সমিতিটিকে @OneToManyএড়িয়ে চলতে হবে কারণ এটি ব্যবহার @ManyToOneবা দ্বিপাক্ষিক @OneToManyসংঘের চেয়ে কম দক্ষ ।

@OneToManyজেপিএ এবং হাইবারনেটের সাথে সম্পর্কের মানচিত্রের সর্বোত্তম উপায় সম্পর্কে আরও বিশদের জন্য এই নিবন্ধটি দেখুন

একের পর এক

একের সাথে এক টেবিলের সম্পর্কটি নীচে দেখায়:

একের পর এক

রিলেশনাল ডাটাবেস সিস্টেমে, এক-এক-এক টেবিলের সম্পর্ক Primary Keyসন্তানের কলামের উপর ভিত্তি করে দুটি টেবিলের সাথে লিঙ্ক করে যা পিতামাতার সারণির সারিটির একটি Foreign Keyরেফারেন্সিংও Primary Key

অতএব, আমরা বলতে পারি যে শিশু টেবিলটি Primary Keyপিতামাতার টেবিলে ভাগ করে ।

উপরে টেবিল ডায়াগ্রাম সালে idকলাম post_detailsটেবিল একটি হয়েছে Foreign Keyসঙ্গে সম্পর্ক postটেবিল id Primary Keyকলাম:

ALTER TABLE
    post_details
ADD CONSTRAINT
    fk_post_details_id
FOREIGN KEY (id) REFERENCES post

টীকা @OneToOneসহ জেপিএ ব্যবহার করা@MapsId

@OneToOneসম্পর্কের মানচিত্রের সর্বোত্তম উপায়টি ব্যবহার করা @MapsId। আপনি সর্বদা সত্তা শনাক্তকারী PostDetailsব্যবহার করে Postসত্তা আনতে পারেন তাই এইভাবে, আপনার দ্বিপাক্ষিক সংঘেরও দরকার নেই ।

ম্যাপিংটি দেখে মনে হচ্ছে:

[কোড ভাষা = "জাভা"] @ সত্ত্বা (নাম = "পোস্টডেটেল") @ টেবিল (নাম = "পোস্ট_ডেটেল") পাবলিক ক্লাস পোস্টডেটেলস {

@Id
private Long id;

@Column(name = "created_on")
private Date createdOn;

@Column(name = "created_by")
private String createdBy;

@OneToOne(fetch = FetchType.LAZY)
@MapsId
@JoinColumn(name = "id")
private Post post;

public PostDetails() {}

public PostDetails(String createdBy) {
    createdOn = new Date();
    this.createdBy = createdBy;
}

//Getters and setters omitted for brevity

} [/ কোড]

এইভাবে, idসম্পত্তিটি প্রাথমিক কী এবং বিদেশী কী উভয় হিসাবে কাজ করে। আপনি লক্ষ্য করবেন যে @Idকলামটি আর কোনও @GeneratedValueটিকা ব্যবহার করে না কারণ শনাক্তকারীটি postসমিতির সনাক্তকারী দিয়ে জনবহুল হয় ।

@OneToOneজেপিএ এবং হাইবারনেটের সাথে সম্পর্কের মানচিত্রের সর্বোত্তম উপায় সম্পর্কে আরও বিশদের জন্য এই নিবন্ধটি দেখুন

অনেক সাথে অধিকের

বহু থেকে বহু টেবিলের সম্পর্কটি নীচের মত দেখাচ্ছে:

অনেক সাথে অধিকের

রিলেশনাল ডেটাবেস সিস্টেমে, অনেকগুলি টু-টেবিলের সম্পর্কটি চাইল্ড টেবিলের মাধ্যমে দুটি প্যারেন্ট টেবিলের সাথে লিঙ্ক করে যা দুটি পিতামাতার সারণীর Foreign Keyকলামগুলিকে উল্লেখ করে দুটি কলাম ধারণ Primary Keyকরে।

উপরের টেবিলের চিত্রটিতে, টেবিলের post_idকলামটির সাথে টেবিল আইডি কলামেরও post_tagএকটি Foreign Keyসম্পর্ক রয়েছে :postPrimary Key

ALTER TABLE
    post_tag
ADD CONSTRAINT
    fk_post_tag_post_id
FOREIGN KEY (post_id) REFERENCES post

এবং, tag_idকলাম post_tagটেবিল একটি হয়েছে Foreign Keyসঙ্গে সম্পর্ক tagটেবিল আইডি Primary Keyকলাম:

ALTER TABLE
    post_tag
ADD CONSTRAINT
    fk_post_tag_tag_id
FOREIGN KEY (tag_id) REFERENCES tag

জেপিএ @ManyToManyম্যাপিং ব্যবহার করে

আপনি many-to-manyজেপিএ এবং হাইবারনেটের সাথে টেবিলের সম্পর্কটিকে এইভাবে মানচিত্র করতে পারেন :

@Entity(name = "Post")
@Table(name = "post")
public class Post {

    @Id
    @GeneratedValue
    private Long id;

    private String title;

    @ManyToMany(cascade = { 
        CascadeType.PERSIST, 
        CascadeType.MERGE
    })
    @JoinTable(name = "post_tag",
        joinColumns = @JoinColumn(name = "post_id"),
        inverseJoinColumns = @JoinColumn(name = "tag_id")
    )
    private Set<Tag> tags = new HashSet<>();

    //Getters and setters ommitted for brevity

    public void addTag(Tag tag) {
        tags.add(tag);
        tag.getPosts().add(this);
    }

    public void removeTag(Tag tag) {
        tags.remove(tag);
        tag.getPosts().remove(this);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Post)) return false;
        return id != null && id.equals(((Post) o).getId());
    }

    @Override
    public int hashCode() {
        return 31;
    }
}

@Entity(name = "Tag")
@Table(name = "tag")
public class Tag {

    @Id
    @GeneratedValue
    private Long id;

    @NaturalId
    private String name;

    @ManyToMany(mappedBy = "tags")
    private Set<Post> posts = new HashSet<>();

    //Getters and setters ommitted for brevity

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Tag tag = (Tag) o;
        return Objects.equals(name, tag.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}
  1. সত্তার tagsসমিতি কেবল এবং ক্যাসকেডের ধরণগুলি Postসংজ্ঞায়িত করে । যেমন এই নিবন্ধে ব্যাখ্যা করা হয়েছে , সত্তা রাষ্ট্রের রূপান্তরটি জেপিএ সংস্থার জন্য কোনও অর্থবোধ করে না কারণ এটি একটি চেইন মোছার কারণ হতে পারে যা শেষ পর্যন্ত সমিতির উভয় পক্ষকে মুছে ফেলতে পারে।PERSISTMERGEREMOVE @ManyToMany
  2. যেমনটি এই নিবন্ধে ব্যাখ্যা করা হয়েছে , আপনি যদি দ্বিদ্বন্দ্বী সমিতিগুলি ব্যবহার করেন তবে ইউটিলিটি পদ্ধতিগুলি অ্যাড / রিমুভ করা বাধ্যতামূলক, যাতে আপনি নিশ্চিত করতে পারেন যে সমিতির উভয় পক্ষই সিঙ্কে রয়েছে।
  3. Postযেহেতু এটি কোনো অনন্য ব্যবসা কী অভাব আছে সত্তা সমতার জন্য সত্তা সনাক্তকারী ব্যবহার করে। হিসাবে ব্যাখ্যা করা এই প্রবন্ধের তবে আপনি আপনার নিশ্চিত যে এটা জুড়ে সামঞ্জস্যপূর্ণ থাকে করতে যতদিন সমতার জন্য সত্তা সনাক্তকারী ব্যবহার করতে পারেন সত্তা রাষ্ট্র ট্রানজিশন
  4. Tagসত্তা ব্যবসার একটি অনন্য কী ব্যবহার করুন যা হাইবারনেট-নির্দিষ্ট দিয়ে চিহ্নিত করা রয়েছে @NaturalIdটীকা। যখন এটির ক্ষেত্রে, অনন্য ব্যবসায়ের কীটি সমতা পরীক্ষার জন্য সেরা প্রার্থী
  5. mappedByএর অ্যাট্রিবিউট postsমধ্যে সমিতি Tagসত্তা চিহ্ন যে, এই দ্বিমুখী সম্পর্ক,Post সত্তা সমিতি মালিক। এটি কেবল প্রয়োজন যেহেতু কেবল এক পক্ষই সম্পর্কের মালিক হতে পারে এবং পরিবর্তনগুলি কেবল এই নির্দিষ্ট দিক থেকে ডাটাবেসে প্রচার করা হয়।
  6. Setএকটি ব্যবহার, পছন্দসই করা হয় Listসঙ্গে @ManyToManyকম কার্যকরী।

@ManyToManyজেপিএ এবং হাইবারনেটের সাথে সম্পর্কের মানচিত্রের সর্বোত্তম উপায় সম্পর্কে আরও বিশদের জন্য এই নিবন্ধটি দেখুন


1

এটি সম্ভবত নীচে হিসাবে একাধিক থেকে বহু সম্পর্কিত জাহাজের জন্য কল করবে



public class Person{

    private Long personId;
    @manytomany

    private Set skills;
    //Getters and setters
}

public class Skill{
    private Long skillId;
    private String skillName;
    @manyToMany(MappedBy="skills,targetClass="Person")
    private Set persons; // (people would not be a good convenion)
    //Getters and setters
}

আপনার একটি জয়েন্ট টেবিল + জয়েন্ট কলামটি সংজ্ঞায়িত করার দরকার হতে পারে তবে এটি ছাড়াও কাজ সম্ভব হবে ...


1

আমি সেভাবে ব্যাখ্যা করব:

ওয়ানটোইন - ওয়ানটোয়েন সম্পর্ক

@OneToOne
Person person;

@OneToOne
Nose nose;

ওয়ানটোম্যান - অনেকের সম্পর্ক T

@OneToMany
Shepherd> shepherd;

@ManyToOne
List<Sheep> sheeps;

ম্যান্টিটোম্যানি - ম্যান্টিটোম্যান সম্পর্ক

@ManyToMany
List<Traveler> travelers;

@ManyToMany
List<Destination> destinations;

0

প্রথমত, সমস্ত সূক্ষ্ম মুদ্রণ পড়ুন। নোট করুন যে এনহাইবারনেট (এইভাবে, আমি হাইবারনেটও ধরে নিই) রিলেশনাল ম্যাপিংয়ের ডিবি এবং অবজেক্ট গ্রাফ ম্যাপিংয়ের সাথে একটি মজার চিঠিপত্র রয়েছে। উদাহরণস্বরূপ, ওয়ান-টু-ওয়ান সম্পর্ক প্রায়শই বহু-এক-এক সম্পর্ক হিসাবে প্রয়োগ করা হয়।

দ্বিতীয়ত, আপনাকে কীভাবে আপনার ও / আর ম্যাপটি লিখতে হবে তা আমরা বলার আগে আমাদের ডিবিও দেখতে হবে। বিশেষত, একক দক্ষতা কি একাধিক ব্যক্তির অধিকারী হতে পারে? যদি তা হয় তবে আপনার একাধিক থেকে অনেকের সম্পর্ক রয়েছে; অন্যথায়, এটি বহু-এক।

তৃতীয়ত, আমি সরাসরি বহু থেকে বহু সম্পর্ক বাস্তবায়িত করতে পছন্দ করি না, বরং এর পরিবর্তে আপনার ডোমেন মডেলটিতে "যোগদানের টেবিল" মডেল করুন - অর্থাত্, এটিকে সত্তার হিসাবে বিবেচনা করুন:

class PersonSkill 
{
    Person person;
    Skill skill;    
}

তারপরে আপনি কি দেখতে পাচ্ছেন? আপনার দুটি থেকে একের মধ্যে অনেকগুলি সম্পর্ক রয়েছে। (এক্ষেত্রে ব্যক্তির পার্সনস্কিলের সংকলন থাকতে পারে তবে দক্ষতার সংগ্রহ নেই)) তবে, কেউ কেউ বহু লোকের সাথে সম্পর্ক (ব্যক্তি এবং দক্ষতার মধ্যে) ব্যবহার করতে পছন্দ করবেন; এটি বিতর্কিত।

চতুর্থত, যদি আপনার দ্বিদর্শী সম্পর্ক থাকে (উদাহরণস্বরূপ, ব্যক্তি কেবল দক্ষতার সংগ্রহই রাখেন না, দক্ষতার লোকের সংকলনও রয়েছে), এনহাইবারনেট আপনার জন্য বিএল-তে দ্বিপাক্ষিকতা প্রয়োগ করে না ; এটি কেবল অধ্যবসায় উদ্দেশ্যে সম্পর্কের দ্বিপাক্ষিকতা বোঝে।

পঞ্চম, একাধিক (সংগ্রহের ম্যাপিং) এর চেয়ে এনএইচবারনেট (এবং আমি হাইবারনেট ধরে নিই) তে সঠিকভাবে ব্যবহার করা অনেকগুলি সহজ।

শুভকামনা!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.