হাইবারনেট একাধিক ব্যাগ ফ্যাচ এক্সেপশন নিক্ষেপ করে - একসাথে একাধিক ব্যাগ আনতে পারে না


471

হাইবারনেট সেশনফ্যাক্টরি তৈরির সময় এই ব্যতিক্রম ছুঁড়ে ফেলেছে:

org.hibernate.loader. MultipleBagFetchException: একসাথে একাধিক ব্যাগ আনতে পারে না

এটি আমার পরীক্ষার কেস:

Parent.java

@Entity
public Parent {

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private Long id;

 @OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
 // @IndexColumn(name="INDEX_COL") if I had this the problem solve but I retrieve more children than I have, one child is null.
 private List<Child> children;

}

Child.java

@Entity
public Child {

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private Long id;

 @ManyToOne
 private Parent parent;

}

কিভাবে এই সমস্যা সম্পর্কে? আমি কি করতে পারি?


সম্পাদনা

ঠিক আছে, আমার সমস্যাটি হ'ল আমার পিতামাতার মধ্যে অন্য "পিতামাতার" সত্তা রয়েছে, আমার আসল আচরণটি হ'ল:

Parent.java

@Entity
public Parent {

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private Long id;

 @ManyToOne
 private AnotherParent anotherParent;

 @OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
 private List<Child> children;

}

AnotherParent.java

@Entity
public AnotherParent {

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private Long id;

 @OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
 private List<AnotherChild> anotherChildren;

}

হাইবারনেট দুটি সংগ্রহ পছন্দ করে না FetchType.EAGERতবে এটি একটি ত্রুটি বলে মনে হচ্ছে, আমি অস্বাভাবিক জিনিসগুলি করছি না ...

সরানো হচ্ছে FetchType.EAGERথেকে Parentবা AnotherParentসমাধান সমস্যা, কিন্তু আমি এটা প্রয়োজন, তাই বাস্তব সমাধান ব্যবহার করা @LazyCollection(LazyCollectionOption.FALSE)পরিবর্তে FetchType(ধন্যবাদ Bozho সমাধান জন্য)।


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

@ থমাসডাব্লু এগুলি তৈরি করা উচিত এমন select * from master; select * from child1 where master_id = :master_id; select * from child2 where master_id = :master_id
স্ক্যালি ক্যোয়ারী

1
যদি আপনি একটির বেশি রয়েছে আপনি কোন অনুরুপ ত্রুটি পেতে পারেন List<child>সঙ্গে fetchTypeজন্য সংজ্ঞায়িত একাধিক List<clield>
বিগ জেড

উত্তর:


555

আমি মনে করি হাইবারনেটের একটি নতুন সংস্করণ (জেপিএ ২.০ সমর্থন করে) এটি পরিচালনা করা উচিত। তবে অন্যথায় আপনি সংগ্রহ ক্ষেত্রগুলি এটিকে দিয়ে এটিকে ঘিরে কাজ করতে পারেন:

@LazyCollection(LazyCollectionOption.FALSE)

টীকা fetchTypeথেকে বৈশিষ্ট্যটি সরাতে মনে রাখবেন @*ToMany

তবে মনে রাখবেন যে বেশিরভাগ ক্ষেত্রে ক এর Set<Child>চেয়ে বেশি উপযুক্ত List<Child>, সুতরাং যদি না আপনার সত্যিকারের প্রয়োজন হয় List- তবে যানSet

কিন্তু মনে করিয়ে যে সেট ব্যবহার সঙ্গে আপনি করা হবে না underlaying নিষ্কাশন কার্টিজিয়ান পণ্য যেমন বর্ণনা তার উত্তরে Vlad Mihalcea !


4
অদ্ভুত, এটি আমার জন্য কাজ করেছে। আপনি কি fetchTypeথেকে মুছে ফেলা হয়েছে @*ToMany?
বোজহো

101
সমস্যাটি হ'ল জেপিএ টীকাগুলি 2 টিরও বেশি আগ্রহী লোড সংগ্রহের অনুমতি না দেওয়ার জন্য পার্স করা হয়। হাইবারনেট-নির্দিষ্ট টিকাগুলি এটিকে মঞ্জুরি দেয়।
বোঝো

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

6
কথাটি হ'ল হাইবারনেট দুটি প্রশ্নের সংগ্রহ একটি ক্যোয়ারী দিয়ে আনতে পারে না। সুতরাং আপনি যখন প্যারেন্ট সত্তার জন্য জিজ্ঞাসা করবেন তখন ফলাফল হিসাবে 2 টি অতিরিক্ত প্রশ্নের প্রয়োজন হবে যা সাধারণত আপনি চান না এমন কিছু।
বোঝো

7
এটি কেন ইস্যুটি সমাধান করে তা সম্পর্কে একটি ব্যাখ্যা থাকা ভাল লাগবে।
ওয়েবনেট

290

কেবল Listটাইপ থেকে টাইপ পরিবর্তন করুন Set

কিন্তু মনে করিয়ে যে আপনার করা হবে না underlaying নিষ্কাশন কার্টিজিয়ান পণ্য যেমন বর্ণনা তার উত্তরে Vlad Mihalcea !


42
একটি তালিকা এবং একটি সেট একই জিনিস নয়: একটি সেট অর্ডার সংরক্ষণ করে না
মাত্তিও


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

3
আমার একই জিনিস একসাথে একাধিক ব্যাগ আনতে পারে না তবে টীকাগুলির কারণে নয়। আমার ক্ষেত্রে, আমি দু'জনের সাথে বাম যোগদান এবং বিভাজনটি করছিলাম *ToManySetআমার সমস্যাটিও সমাধান করতে টাইপ পরিবর্তন করা । দুর্দান্ত এবং ঝরঝরে সমাধান। এটি সরকারী উত্তর হওয়া উচিত।
এল। হল্যান্ডা

20
আমি উত্তরটি পছন্দ করেছি, কিন্তু মিলিয়ন ডলারের প্রশ্নটি: কেন? সেট সহ কেন ব্যতিক্রম দেখায় না? ধন্যবাদ
হিন্টোরি

140

আপনার কোডটিতে একটি হাইবারনেট-নির্দিষ্ট @ ফ্যাচ টিকা যুক্ত করুন:

@OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
private List<Child> childs;

এটি হাইবারনেট বাগ এইচএইচএইচ -1718 সম্পর্কিত সমস্যার সমাধান করবে


5
@ ডেভরলজ কেন সাবসিলেক্ট এই সমস্যাটি সমাধান করে। আমি আপনার সমাধান এবং এর কাজটি চেষ্টা করেছিলাম, তবে কীভাবে সমস্যাটি সমাধান করে এটি ব্যবহার করা যায় তা জানেন না?
হাকুনামাতাটা

Setসত্যই বোধগম্য না হলে এটি সেরা উত্তর । ক্যোয়ারিতে ফলাফল OneToManyব্যবহার করে একক সম্পর্ক Setরাখা 1+<# relationships>, যেখানে প্রশ্নের FetchMode.SUBSELECTফলাফল হিসাবে ব্যবহার করা 1+1। এছাড়াও, গৃহীত উত্তরের ( LazyCollectionOption.FALSE) এ টীকা ব্যবহারের ফলে আরও বেশি ক্যোরিয়াস কার্যকর করা যায়।
মিস্ট্রিথিয়ালিয়াস

1
ফেচটাইপ.এগ্রার এটির জন্য উপযুক্ত সমাধান নয়। হাইবারনেট আনুন প্রোফাইলগুলি নিয়ে এগিয়ে যাওয়া দরকার এবং এটি সমাধান করা দরকার
মিলিন্দা বান্দারা

2
অন্য দুটি শীর্ষ উত্তর আমার সমস্যার সমাধান করেনি। এই এক করেছে। ধন্যবাদ!
22:48

3
কেউ কি জানে যে কেন সুবিক্স এটি ঠিক করে, কিন্তু যোগদান করেন না?
ইনোকোঙ্কিটি

41

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

আমাদের নিম্নোক্ত সত্তা বিবেচনা করে:

এখানে চিত্র বর্ণনা লিখুন

এবং, আপনি Postসমস্ত সংগ্রহ commentsএবং tagsসংগ্রহের সাথে কিছু অভিভাবক সত্তা আনতে চান ।

যদি আপনি একাধিক JOIN FETCHনির্দেশনা ব্যবহার করেন :

List<Post> posts = entityManager
.createQuery(
    "select p " +
    "from Post p " +
    "left join fetch p.comments " +
    "left join fetch p.tags " +
    "where p.id between :minId and :maxId", Post.class)
.setParameter("minId", 1L)
.setParameter("maxId", 50L)
.getResultList();

হাইবারনেট কুখ্যাতকে ফেলে দেবে:

org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags [
  com.vladmihalcea.book.hpjp.hibernate.fetching.Post.comments,
  com.vladmihalcea.book.hpjp.hibernate.fetching.Post.tags
]

হাইবারনেট একাধিক ব্যাগ আনার অনুমতি দেয় না কারণ এটি কার্টেসিয়ান পণ্য তৈরি করে

সবচেয়ে খারাপ "সমাধান"

এখন, আপনি প্রচুর উত্তর, ব্লগ পোস্ট, ভিডিও বা অন্যান্য সংস্থান খুঁজে পাবেন যা আপনার সংগ্রহের জন্য একটি এর Setপরিবর্তে ব্যবহার করতে বলে List

এটা ভয়ানক পরামর্শ। যে না!

ব্যবহার Setsপরিবর্তে Listsকরতে হবে MultipleBagFetchExceptionদূরে যেতে কিন্তু কার্টিজিয়ান পণ্য এখনো, যা আসলে এমনকি খারাপ থাকবে, আপনি কার্য-সম্পাদনার সমস্যা জানতে করব বহুদিন পরে আপনি এই "ফিক্স" প্রয়োগ করা হয়েছে।

সঠিক সমাধান

আপনি নিম্নলিখিত কৌশলটি করতে পারেন:

List<Post> posts = entityManager
.createQuery(
    "select distinct p " +
    "from Post p " +
    "left join fetch p.comments " +
    "where p.id between :minId and :maxId ", Post.class)
.setParameter("minId", 1L)
.setParameter("maxId", 50L)
.setHint(QueryHints.PASS_DISTINCT_THROUGH, false)
.getResultList();

posts = entityManager
.createQuery(
    "select distinct p " +
    "from Post p " +
    "left join fetch p.tags t " +
    "where p in :posts ", Post.class)
.setParameter("posts", posts)
.setHint(QueryHints.PASS_DISTINCT_THROUGH, false)
.getResultList();

প্রথম জেপিকিউএল কোয়েরিতে distinctএসকিউএল বিবৃতিতে যান না। এজন্য আমরা PASS_DISTINCT_THROUGHJPA ক্যোয়ারী ইঙ্গিতটি সেট করেছি false

DISTINCT এর JPQL- এর দুটি অর্থ রয়েছে এবং getResultListএসকিউএল পক্ষের নয়, জাভা দিকটিতে ফিরে আসা জাভা অবজেক্টের রেফারিকেট তৈরি করার প্রয়োজন আমাদের । পরীক্ষা করে দেখুন এই নিবন্ধটি আরো বিস্তারিত জানার জন্য।

যতক্ষণ আপনি ব্যবহার করে সর্বাধিক একটি সংগ্রহ এনেছেন JOIN FETCH, আপনি ভাল থাকবেন।

একাধিক ক্যোয়ারী ব্যবহার করে আপনি কার্টেসিয়ান পণ্য এড়াতে পারবেন যেহেতু অন্য যে কোনও সংগ্রহ থেকে কিন্তু প্রথমটি একটি গৌণ কোয়েরি ব্যবহার করে নিয়ে আসে।

আপনি আরও কিছু করতে পারেন

যদি আপনি FetchType.EAGERকৌশলগুলি ম্যাপিংয়ের সময় @OneToManyবা @ManyToManyসংঘের সময় ব্যবহার করে থাকেন তবে সহজেই আপনি এ দিয়ে শেষ করতে পারেন MultipleBagFetchException

উত্সাহিত আনার জন্য FetchType.EAGERআপনি বদলানো ভাল Fetchype.LAZYকারণ একটি ভয়ানক ধারণা যা অ্যাপ্লিকেশন কর্মক্ষমতা সমালোচনামূলক সমস্যার দিকে নিয়ে যেতে পারে

উপসংহার

চলুন FetchType.EAGERথেকে সুইচ না Listকরতে Setমাত্র কারণ এটি করলে তা হাইবারনেট করতে হবে লুকিয়ে MultipleBagFetchExceptionগালিচা অধীনে। একবারে মাত্র একটি সংগ্রহ আনুন এবং আপনি ভাল থাকবেন।

যতক্ষণ আপনি এটি সংগ্রহের সূচনা করার জন্য একই সংখ্যক ক্যোয়ারী দিয়ে করেন ততক্ষণ আপনি ভাল আছেন। কোনও সংগ্রহকে কোনও লুপে আরম্ভ করবেন না, কারণ এটি এন + 1 ক্যোয়ারী সমস্যাগুলিকে ট্রিগার করবে , যা কার্য সম্পাদনের জন্যও খারাপ।


ভাগ করা জ্ঞানের জন্য ধন্যবাদ। তবে, DISTINCTএই সমাধানে পারফরম্যান্স কিলার। পরিত্রাণের উপায় আছে কি?distinct ? ( Set<...>পরিবর্তে ফিরে আসার চেষ্টা করে, বেশি সাহায্য করেনি)
লিওনিড দাশকো

1
DISTINCT এসকিউএল বিবৃতিতে যায় না। এজন্য PASS_DISTINCT_THROUGHসেট করা আছে false। JPQL- এ DISTINCT এর 2 টি অর্থ রয়েছে এবং এখানে আমাদের এসকিউএল দিকের নয়, জাভা দিকটিতে অনুলিপি করা দরকার। পরীক্ষা করে দেখুন এই নিবন্ধটি আরো বিস্তারিত জানার জন্য।
ভ্লাদ মিহলসিয়া

ভ্লাদ, আমি এটি সত্যিই উপকারী বলে মনে করি সেই সহায়তার জন্য ধন্যবাদ। তবে বিষয়টি সম্পর্কিত ছিলhibernate.jdbc.fetch_size (শেষ পর্যন্ত আমি এটি 350 এ সেট করেছিলাম)। সুযোগক্রমে, আপনি কীভাবে নেস্টেড সম্পর্কগুলি অনুকূল করতে চান? উদাহরণস্বরূপ সত্তা 1 -> সত্তা 2 -> অস্তিত্ব 3.1, সত্তা 3.2 (যেখানে অস্তিত্ব 3.1 / 3.2 হ'ল @ একমোটিক সম্পর্ক)
লিওনিড দাশকো

1
@ লিওনিডড্যাশকো আমার মধ্যে আনার অধ্যায়টি দেখুন ডেটা আনার সাথে সম্পর্কিত অনেক টিপসের জন্য উচ্চ-পারফরম্যান্স জাভা বইতে আনার ।
ভ্লাদ মিহলসিয়া

1
না তুমি পারবে না. এসকিউএল এর শর্তাবলী এটি সম্পর্কে চিন্তা করুন। কার্টেসিয়ান পণ্য তৈরি না করে আপনি একাধিক এক থেকে বহু সংঘে যোগ দিতে পারবেন না।
ভ্লাদ মিহলসিয়া

31

এই পোস্টগুলিতে এবং অন্যগুলিতে বর্ণিত প্রতিটি বিকল্পের সাথে চেষ্টা করার পরে, আমি এই সিদ্ধান্তে পৌঁছেছি যে এই সিদ্ধান্তটি নীচে।

প্রতিটি XToMany জায়গায় @ XXXToMany(mappedBy="parent", fetch=FetchType.EAGER) এবং অন্তর্বর্তী পরে

@Fetch(value = FetchMode.SUBSELECT)

এটি আমার পক্ষে কাজ করেছে


5
যোগ @Fetch(value = FetchMode.SUBSELECT)করা যথেষ্ট ছিল
user2601995

1
এটি হাইবারনেট একমাত্র সমাধান। আপনি যদি একটি ভাগ করা জেপিএ লাইব্রেরি ব্যবহার করছেন?
মিশেল

3
আমি নিশ্চিত যে আপনি এর অর্থ বোঝাতে চাইছেন নি, তবে ডেভআরলজ 3 বছর আগে ইতিমধ্যে একই জিনিস লিখেছিলেন
phil294

21

এটি ঠিক করার জন্য আপনার নেস্টেড অবজেক্টের জন্য কেবল Setস্থান নিন List

@OneToMany
Set<Your_object> objectList;

এবং ব্যবহার করতে ভুলবেন না fetch=FetchType.EAGER

এটা কাজ করবে।

CollectionIdআপনি যদি কেবল তালিকার সাথে থাকতে চান তবে হাইবারনেটে আরও একটি ধারণা রয়েছে।

কিন্তু মনে করিয়ে যে আপনার করা হবে না underlaying নিষ্কাশন কার্টিজিয়ান পণ্য যেমন বর্ণনা তার উত্তরে Vlad Mihalcea !


11

এই ধরণের অবজেক্ট ম্যাপিংগুলিতে হাইবারনেটের আচরণ সম্পর্কে আমি একটি ভাল ব্লগ পোস্ট পেয়েছি: http://blog.eyallupu.com/2010/06/hibernate-exception-sim વાরা html


4
স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম। তবে কেবলমাত্র লিঙ্কযুক্ত উত্তরগুলি নিরুৎসাহিত করা হয়। প্রায়শই জিজ্ঞাসা করা প্রশ্নগুলি দেখুন এবং বিশেষত: স্ট্যাকওভারফ্লো :: ফ্যাক# ডিলেশন
femtoRgon

6

আপনি জেপিএতে বুথ ইগ্রার তালিকা রাখতে পারেন এবং তাদের মধ্যে কমপক্ষে একটিতে জেপিএ টীকা @ অর্ডারকালাম যুক্ত করতে পারেন (অবশ্যই আদেশের জন্য কোনও ক্ষেত্রের নাম সহ)। নির্দিষ্ট হাইবারনেট টীকাগুলির দরকার নেই। তবে মনে রাখবেন যে যদি নির্বাচিত ক্ষেত্রে 0 থেকে শুরু হওয়া মান না থাকে তবে এটি তালিকায় ফাঁকা উপাদান তৈরি করতে পারে

 [...]
 @OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
 @OrderColumn(name="orderIndex")
 private List<Child> children;
 [...]

বাচ্চাদের মধ্যে আপনার পরে অর্ডারআইডেক্স ক্ষেত্র যুক্ত করা উচিত


2

আমরা তালিকার পরিবর্তে সেট চেষ্টা করেছি এবং এটি একটি দুঃস্বপ্ন: যখন আপনি দুটি নতুন বস্তু যুক্ত করেন, সমান () এবং হ্যাশকোড () উভয়ই আলাদা করতে ব্যর্থ হন! কারণ তাদের কোনও আইডি নেই।

Eclipse এর মতো সাধারণ সরঞ্জামগুলি ডেটাবেস টেবিলগুলি থেকে এই জাতীয় কোড তৈরি করে:

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    return result;
}

আপনি এই নিবন্ধটিও পড়তে পারেন যা জেপিএ / হাইবারনেটকে কীভাবে বিভ্রান্ত করেছে তা সঠিকভাবে ব্যাখ্যা করে। এটি পড়ার পরে, আমি মনে করি আমার জীবনের কোনও ওআরএম এটিই শেষ সময়।

আমি ডোমেন ড্রাইভড ডিজাইনের লোকদের মুখোমুখি হয়েছি যারা মূলত বলে যে ওআরএম একটি ভয়ানক জিনিস।


1

যখন আপনার কাছে সংরক্ষণাগার সংগ্রহের সাথে জটিল জটিল জিনিস রয়েছে তখন এগারগুলি ফেচারটাইপের সাথে সেগুলি রাখার জন্য ভাল ধারণাটি নাও হতে পারে, যখন আপনাকে সত্যিকারের সংগ্রহগুলি লোড করতে হবে: Hibernate.initialize(parent.child)ডেটা আনার জন্য।


0

আমার জন্য, সমস্যাটি ইগ্রার নেস্টেড ছিল নিয়ে ।

একটি সমাধান হ'ল নেস্টেড ক্ষেত্রগুলিকে এলএজিওয়াইতে সেট করা এবং নেস্টেড ফিল্ড (গুলি) লোড করতে হাইবারনেট.ইনাইটালাইজ () ব্যবহার করুন:

x = session.get(ClassName.class, id);
Hibernate.initialize(x.getNestedField());

0

আমার শেষে, যখন আমি ফেচটাইপ.এগ্রের সাথে একাধিক সংগ্রহ করেছি তখন এটি হয়েছিল:

@ManyToMany(fetch = FetchType.EAGER, targetEntity = className.class)
@JoinColumn(name = "myClass_id")
@JsonView(SerializationView.Summary.class)
private Collection<Model> ModelObjects;

অতিরিক্তভাবে, সংগ্রহগুলি একই কলামে যোগদান করছিল।

এই সমস্যাটি সমাধান করার জন্য, আমি সংগ্রহগুলির মধ্যে একটি সংগ্রহটি ফেচটাইপকে পরিবর্তন করেছি LA LZY যেহেতু এটি আমার ব্যবহারের ক্ষেত্রে ঠিক।

গুডলাক! ~ জে


0

উভয় মন্তব্য Fetchএবং LazyCollectionকখনও কখনও প্রকল্প চালাতে সাহায্য করে।

@Fetch(FetchMode.JOIN)
@LazyCollection(LazyCollectionOption.FALSE)

0

এর মধ্যে একটি ভাল বিষয় @LazyCollection(LazyCollectionOption.FALSE)হ'ল এই টিকাটি সহ বেশ কয়েকটি ক্ষেত্র সহাবস্থান থাকতে পারেFetchType.EAGER , এমনকি এমন পরিস্থিতিতেও নয় যেখানে এমন সহাবস্থান বৈধতা রয়েছে।

উদাহরণস্বরূপ, যদি একটি Orderএকটি তালিকা থাকতে পারে OrderGroup(একটি সংক্ষিপ্ত এক) একটি তালিকা সেইসাথে Promotions(এছাড়াও সংক্ষিপ্ত)। @LazyCollection(LazyCollectionOption.FALSE)উভয়ই কারণ LazyInitializationExceptionনা ছাড়াই ব্যবহার করা যেতে পারেMultipleBagFetchException

আমার ক্ষেত্রে @Fetchআমার সমস্যাটি সমাধান করেছিল MultipleBacFetchExceptionতবে তারপরে LazyInitializationExceptionকুখ্যাত no Sessionত্রুটি।


-5

আপনি এটি সমাধান করতে একটি নতুন টিকা ব্যবহার করতে পারেন:

@XXXToXXX(targetEntity = XXXX.class, fetch = FetchType.LAZY)

আসলে, আনার ডিফল্ট মানটি ফেচটাইপ.লাজিওয়াই।


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