হাইবারনেট ত্রুটি: org.hibernate.NonUniqueObjectException: একই সনাক্তকারী মান সহ একটি পৃথক বস্তু ইতিমধ্যে সেশনের সাথে যুক্ত ছিল


114

আমার দুটি ব্যবহারকারীর অবজেক্ট রয়েছে এবং আমি চেষ্টা করে অবজেক্টটি সংরক্ষণ করার চেষ্টা করছি

session.save(userObj);

আমি নিম্নলিখিত ত্রুটি পাচ্ছি:

Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
[com.pojo.rtrequests.User#com.pojo.rtrequests.User@d079b40b]

আমি ব্যবহার করে সেশন তৈরি করছি

BaseHibernateDAO dao = new BaseHibernateDAO();          

rtsession = dao.getSession(userData.getRegion(),
                           BaseHibernateDAO.RTREQUESTS_DATABASE_NAME);

rttrans = rtsession.beginTransaction();
rttrans.begin();

rtsession.save(userObj1);
rtsession.save(userObj2);

rtsession.flush();
rttrans.commit();

rtsession.close(); // in finally block

আমি session.clear()সংরক্ষণ করার আগেও চেষ্টা করেছি , এখনও ভাগ্য নেই।

এটি যখন প্রথম কোনও ব্যবহারকারীর অনুরোধ আসে তখন আমি সেশনটির বিষয়বস্তু পাচ্ছি, তাই আমি কেন আসছি সেটিকে কেন অধিবেশনটিতে উপস্থিত রয়েছে তা বলছি।

কোনও পরামর্শ?


এখানে আরও একটি দুর্দান্ত থ্রেড যা আমার সমস্যাটি সমাধান করতে সহায়তা করেছে getj2ee.over-blog.com/…
রেড্ডিমেইলস

উত্তর:


173

আমার এই ত্রুটিটি বহুবার হয়েছে এবং এটি খুঁজে বের করা বেশ শক্ত ...

মূলত, হাইবারনেট যা বলছে তা হ'ল আপনার দুটি জিনিস যা একই শনাক্তকারী (একই প্রাথমিক কী) রয়েছে তবে সেগুলি একই বস্তু নয়।

আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি আপনার কোডটি ভেঙে ফেলুন, ত্রুটিটি না যাওয়া পর্যন্ত বিট মন্তব্য করুন এবং কোডটি ফিরে না আসা পর্যন্ত ফিরিয়ে দিন এবং আপনার ত্রুটিটি খুঁজে পাওয়া উচিত।

এটি বেশিরভাগ ক্ষেত্রে ক্যাসকেডিং সাশ্রয়ের মাধ্যমে ঘটে যেখানে বস্তু A এবং B এর মধ্যে একটি ক্যাসকেড সেভ রয়েছে তবে অবজেক্ট বি ইতিমধ্যে সেশনের সাথে যুক্ত হয়েছে তবে এ-তে থাকা বিটির মতো নয় is

আপনি কোন প্রাথমিক কী জেনারেটরটি ব্যবহার করছেন?

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

উদাহরণ

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

সুতরাং সহজ পদ্ধতির পরীক্ষা করা হবে আপনি যদি কোনও টেবিলের কোনও মান যা কোনও কিছুর অংশ হিসাবে আপডেট করেছেন / মুছে ফেলেছেন এবং পরে আপনি আবার একই জিনিসগুলি সন্নিবেশ করানোর চেষ্টা করছেন


4
সুন্দর উত্তর প্রাইমারি কীটি আমার সমস্যা ছিল, জেনারেটেডভ্যালু পোস্টগ্রেএসকিএল-এর জন্য সিকোয়েন্স সেট করে সমাধান করা হয়েছিল।
রডরিগো ফেরারি

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

18

এটি কেবলমাত্র একটি পয়েন্ট যেখানে হাইবারনেট এটি সমাধানের চেয়ে আরও বেশি সমস্যা তৈরি করে। আমার ক্ষেত্রে একই শনাক্তকারী 0 সহ অনেকগুলি অবজেক্ট রয়েছে কারণ সেগুলি নতুন এবং একটি নেই। ডিবি তাদের উত্পন্ন করে। কোথাও আমি পড়েছি যে 0 টি সিগন্যাল আইডি সেট করা নেই। এগুলি বজায় রাখার স্বজ্ঞাত উপায়টি তাদের উপর পুনরাবৃত্তি এবং অবজেক্টগুলি সংরক্ষণ করার জন্য হাইবারনেট বলছে। তবে আপনি এটি করতে পারবেন না - "অবশ্যই আপনার জানা উচিত যে হাইবারনেট এটি এবং সেভাবে কাজ করে therefore শেষ পর্যন্ত আপনার নিজের দ্বারা একটি সাধারণ ম্যাপার দিয়ে এটি করা আরও সহজ, কারণ হাইবারনেট কেবল একটি অতিরিক্ত অন্তঃসত্ত্বা বোঝা। আরেকটি উদাহরণ: একটি ডাটাবেস থেকে প্যারামিটারগুলি পড়ার চেষ্টা করা এবং সেগুলিকে অন্য জেনে রাখার জন্য আপনাকে ম্যানুয়ালি প্রায় সমস্ত কাজ করতে বাধ্য করে।


13
আমি হাইবারনেটকেও ঘৃণা করি ... এবং ডাটাবেসগুলি ... সমস্ত সমস্যার পরেও তারা আমাকে ঘটিয়েছিল আমি অনুমান করি কোনও পাঠ্য ফাইল ব্যবহার করা সহজ (আমি উপহাস করছি, তবে এখনও ...)।
ইগর পপভ

আমার ক্ষেত্রে একই শনাক্তকারী 0 সহ অনেকগুলি অবজেক্ট রয়েছে কারণ সেগুলি নতুন এবং একটি নেই। ডিবি তাদের উত্পন্ন করে। কোথাও আমি পড়েছি যে 0 টি সিগন্যাল আইডি সেট করা নেই। এগুলি বজায় রাখার স্বজ্ঞাত উপায়টি তাদের উপর পুনরাবৃত্তি এবং অবজেক্টগুলি সংরক্ষণ করার জন্য হাইবারনেট বলছে । আমার ঠিক এটি করা দরকার। আপনি কি আমাকে বলতে পারবেন যে এটি করার জন্য "হাইবারনেট উপায়" কোনটি?
রামিসেস

আমার ক্ষেত্রে আমাকে এই বস্তুর দুটি উদাহরণ রয়েছে বলে আমার সেশন ডলার (মায়োবজেক্ট) ব্যবহার করতে হয়েছিল ually সাধারণত কোনও সত্তা স্থির থাকে এবং সেশন থেকে বিচ্ছিন্ন হয়ে গেলে এমনটি ঘটে। এই সত্তার আরেকটি উদাহরণ হাইবারনেট করার জন্য অনুরোধ করা হয়েছে। এই দ্বিতীয় উদাহরণটি অধিবেশনটির সাথে যুক্ত ছিল। প্রথম উদাহরণটি সংশোধন করা হয়েছে। Getj2ee.over-blog.com/…
রেড্ডিমেইলস

এটি হাইবারনেট তৈরির সমস্যা নয়, এটি কীভাবে কাজ করে তা বোঝার অভাব
এসিভি

17

ব্যবহারের session.evict(object); ফাংশন evict()পদ্ধতি অধিবেশন ক্যাশে থেকে উদাহরণস্বরূপ মুছে ফেলার জন্য ব্যবহার করা হয়। সুতরাং প্রথমবার অবজেক্টটি সংরক্ষণ করার জন্য, session.save(object)ক্যাশে থেকে অবজেক্টটি উচ্ছেদের আগে কল করার পদ্ধতিতে বস্তুটি সংরক্ষণ করুন । একইভাবে কল করে session.saveOrUpdate(object)বা session.update(object)উচ্ছেদ () কল করার আগে অবজেক্টটি আপডেট করুন ।


11

আপনি যখন পড়তে এবং লেখার জন্য একই সেশন অবজেক্টটি ব্যবহার করেন তখন এটি ঘটতে পারে। কিভাবে? বলুন আপনি একটি সেশন তৈরি করেছেন। আপনি প্রাইমারী কী Emp_id = 101 সহ কর্মচারী সারণী থেকে একটি রেকর্ড পড়েছেন এখন আপনি জাভাতে রেকর্ডটি পরিবর্তন করেছেন। এবং আপনি ডাটাবেসে কর্মচারী রেকর্ড সংরক্ষণ করতে যাচ্ছেন। আমরা এখানে কোথাও সেশন বন্ধ করে নেই। যে বিষয়টি পড়া হয়েছিল সেগুলিও অধিবেশনটিতে স্থির থাকে। এটি যে লেখার জন্য আমরা ইচ্ছুক তার সাথে এটি দ্বন্দ্ব। সুতরাং এই ত্রুটি আসে।


9

যেহেতু উপরে কেউ ইতিমধ্যে ইঙ্গিত করেছে আমি যখন এই cascade=allসম্পর্কের উভয় প্রান্তে one-to-manyছিলাম তখন আমি এই সমস্যায় পড়েছিলাম, সুতরাং আসুন আমরা A -> বি (এ থেকে এক-বহু এবং বি থেকে বহু-এক) ধরে নিই এবং উদাহরণটি আপডেট করছিলাম বি এ এবং তারপরে সেভআরআপটেটকে (এ) কল করার ফলে এটি একটি বিজ্ঞপ্তি সংরক্ষণের অনুরোধের ফলস্বরূপ, A এর ট্রিগারগুলি A কে রক্ষা করে যা A এর সংরক্ষণের ট্রিগার করে ... এবং তৃতীয় দৃষ্টিতে সত্তার (A) হিসাবে চেষ্টা করার চেষ্টা করা হয়েছিল সেশনে যোগ করুন
  আমি এক প্রান্ত থেকে ক্যাসকেড সরিয়ে এটি সমাধান করতে পারতাম।


আমার সমস্যার সমাধান একসাথে স্ট্যাকওভারফ্লো.com
জিজ্ঞাসা /

5

আপনি session.merge(obj)যদি একই সনাক্তকারী ধ্রুবক অবজেক্টের সাথে বিভিন্ন সেশন দিয়ে সেভ করছেন তবে আপনি ব্যবহার করতে পারেন ।
এটি কাজ করেছে, আমার আগেও একই সমস্যা ছিল।


4

আমিও এই সমস্যায় পড়েছি এবং ত্রুটিটি খুঁজে পেতে খুব কঠিন সময় পেলাম।

আমার যে সমস্যাটি ছিল তা হ'ল:

বস্তুটি একটি হাই হাইবারনেট সেশনের সাথে একটি দাও দ্বারা পঠিত।

এই ব্যতিক্রমটি এড়ানোর জন্য, এই দাওটিকে পরবর্তীতে সংরক্ষণ / আপডেট করতে চলেছে এমন আবশ্যকটিকে কেবল পুনরায় পড়ুন।

তাই:

class A{      

 readFoo(){
       someDaoA.read(myBadAssObject); //Different Session than in class B
    }

}

class B{



 saveFoo(){
       someDaoB.read(myBadAssObjectAgain); //Different Session than in class A
       [...]
       myBadAssObjectAgain.fooValue = 'bar';
       persist();
    }

}

আশা করি কিছু লোকের অনেক সময় বাঁচবে!


4

আমি এই সমস্যার মধ্যে দৌড়েছি:

  1. একটি বস্তু মোছা হচ্ছে (এইচকিউএল ব্যবহার করে)
  2. তাত্ক্ষণিক একই আইডিতে একটি নতুন অবজেক্ট সংরক্ষণ করা

আমি মুছে ফেলার পরে ফলাফলগুলি ফ্লাশ করে এবং নতুন অবজেক্টটি সংরক্ষণ করার আগে ক্যাশে সাফ করে সমাধান করেছি

String delQuery = "DELETE FROM OasisNode";
session.createQuery( delQuery ).executeUpdate();
session.flush();
session.clear();

4

এই সমস্যাটি ঘটে যখন আমরা একই সেশনের অবজেক্টটি আপডেট করি যা আমরা ডাটাবেস থেকে অবজেক্টটি আনতে ব্যবহার করেছি।

আপনি আপডেট পদ্ধতির পরিবর্তে হাইবারনেটের মার্জ পদ্ধতিটি ব্যবহার করতে পারেন।

যেমন প্রথমে সেশন.জেট () ব্যবহার করুন এবং তারপরে আপনি সেশন.মিটার (অবজেক্ট) ব্যবহার করতে পারেন। এই পদ্ধতিটি কোনও সমস্যা তৈরি করবে না। আমরা ডাটাবেসে অবজেক্ট আপডেট করতে মার্জ () পদ্ধতিটিও ব্যবহার করতে পারি।


3

সেশনের অভ্যন্তরে বস্তুটি পান, এখানে একটি উদাহরণ:

MyObject ob = null;
ob = (MyObject) session.get(MyObject.class, id);

3
দুর্দান্ত চেষ্টা করুন, তবে "ওব" অবজেক্টটি আপডেট হওয়া ডেটা ছাড়াই ফিরে আসে (এটি বিবেচনা করে যে এটি রানটাইমের সময় অ্যাপ্লিকেশনটির মাধ্যমে ডেটাবেস এবং তার সংরক্ষণের মাধ্যমে প্রাপ্ত বস্তুর মধ্যে রয়েছে)।
অ্যালেক্স

2

আপনার আইডি ম্যাপিং সঠিক? যদি ডেটাবেস কোনও শনাক্তকারীর মাধ্যমে আইডি তৈরির জন্য দায়বদ্ধ থাকে, আপনার নিজের ইউরোবজেক্টটিকে সেই ম্যাপ করতে হবে ..


2

কোনও অবজেক্ট মুছে ফেলার ক্ষেত্রে আমি এই সমস্যার মুখোমুখি হয়েছি, না উচ্ছেদ বা পরিষ্কার সাহায্য করেছে।

/**
 * Deletes the given entity, even if hibernate has an old reference to it.
 * If the entity has already disappeared due to a db cascade then noop.
 */
public void delete(final Object entity) {
  Object merged = null;
  try {
    merged = getSession().merge(entity);
  }
  catch (ObjectNotFoundException e) {
    // disappeared already due to cascade
    return;
  }
  getSession().delete(merged);
}

2

পুনরাবৃত্তিমূলক বস্তুগুলির যে অবস্থান শুরু হয় তার আগে আপনার সেশনটি বন্ধ করা উচিত এবং তারপরে আপনার একটি নতুন অধিবেশন শুরু করা উচিত

session.close();      
session = HibernateUtil.getSessionFactory().openSession();

সুতরাং এই ভাবে এক সেশনে একাধিক সত্তা নেই যা একই শনাক্তকারী।


2

পার্টিতে দেরীতে, তবে আগত ব্যবহারকারীদের জন্য সহায়তা করতে পারে -

আমি এই সমস্যাটি পেয়েছি যখন আমি ব্যবহার করে একটি রেকর্ড নির্বাচন করি getsession() এবং একই অধিবেশন ব্যবহার করে একই সনাক্তকারী দিয়ে আবার অন্য রেকর্ড আপডেট করি তখন সমস্যাটি হয়। নীচে কোড যুক্ত করা হয়েছে।

Customer existingCustomer=getSession().get(Customer.class,1);
Customer customerFromUi;// This customer details comiong from UI with identifer 1

getSession().update(customerFromUi);// Here the issue comes

এটি কখনই করা উচিত নয়। সমাধানটি হয় ব্যবসায়ের যুক্তি আপডেট করার আগে বা সত্ত্বেও সেশন উচ্ছেদ করা হয়।


1

আপনি @ আইডি কলামের জন্য @ জেনারেটওয়ালু রাখতে ভুলে গেছেন কিনা তা পরীক্ষা করে দেখুন। মুভি এবং জেনারের মধ্যে অনেকের মধ্যে অনেকেরই আমার একই সমস্যা ছিল। প্রোগ্রামটি হাইবারনেট ত্রুটি ছুঁড়েছে: org.hibernate.NonUniqueObjectException: একই সনাক্তকারী মান সহ একটি পৃথক বস্তু ইতিমধ্যে সেশনের ত্রুটির সাথে যুক্ত ছিল। আমি পরে জানতে পেরেছিলাম যে জেনারআইড পদ্ধতিতে আপনার ঠিক জেনারেটভ্যালু আছে তা নিশ্চিত করতে হবে।


আমি কীভাবে আমার প্রশ্নের সমাধান দিতে পারি? আমি কি টাস্ক ক্লাসে একটি আইডি কলাম তৈরি করব? stackoverflow.com/questions/55732955/...
sbattou

1

শূন্য বা 0 টি পছন্দ লাগে কিনা তা কেবল আইডি পরীক্ষা করে দেখুন

if(offersubformtwo.getId()!=null && offersubformtwo.getId()!=0)

যোগ বা আপডেট করতে যেখানে সামগ্রীটি ফর্ম থেকে পোজোতে সেট করা আছে


1

আমি এনহাইবারনেটে নতুন, এবং আমার সমস্যাটি হ'ল আমি আমার অবজেক্টটি সংরক্ষণ করার চেয়ে আমার জিজ্ঞাসা করার জন্য একটি আলাদা সেশন ব্যবহার করেছি। সুতরাং সংরক্ষণের সেশনটি অবজেক্ট সম্পর্কে জানত না।

এটি সুস্পষ্ট বলে মনে হচ্ছে, তবে পূর্ববর্তী উত্তরগুলি পড়তে আমি 2 সেশনের নয়, সর্বত্র 2 টি বস্তুর সন্ধান করছিলাম।


1

@ জেনারেটেডভ্যালু (কৌশল = জেনারেশনটাইপ.আইডিএনটিআইটি), আপনার সত্তার শিমের প্রাথমিক কী সম্পত্তিটিতে এই টীকাকে যুক্ত করা এই সমস্যাটি সমাধান করা উচিত।


1

আমি এই সমস্যাটি সমাধান করেছি।
প্রকৃতপক্ষে এটি হ'ল কারণ আমরা শিম শ্রেণিতে জেনারেটর ধরণের পিকে সম্পত্তির প্রয়োগ ভুলে গিয়েছি। সুতরাং এটি যেমন যে কোনও ধরনের তৈরি করুন

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

যখন আমরা শিমের অবজেক্টগুলিকে অবিরাম রাখি, তখন প্রতিটি বস্তু একই আইডি অর্জন করে, তাই প্রথম অবজেক্টটি সংরক্ষণ করা হয়, যখন অন্য আইটেমটি অবিচল থাকতে হয় তখন Exception: org.hibernate.NonUniqueObjectException:একই আইডেন্টিফায়ার মান সহ এই জাতীয় এইচআইবি এফডাব্লু ইতিমধ্যে সেশনের সাথে যুক্ত ছিল।


1

সমস্যাটি ঘটে কারণ একই হাইবারনেট সেশনে আপনি একই আইডেন্টিফায়ার দিয়ে দুটি জিনিস সংরক্ষণ করার চেষ্টা করছেন two দুটি সমাধান রয়েছে: -

  1. এটি ঘটছে কারণ আপনি নীচের মতো আইডি ক্ষেত্রগুলির জন্য আপনার ম্যাপিং.এক্সএমএল ফাইলটি সঠিকভাবে কনফিগার করেননি: -

    <id name="id">
      <column name="id" sql-type="bigint" not-null="true"/>
      <generator class="hibernateGeneratorClass"</generator>
    </id>
  2. আইসেশনক্লেয়ারের মতো প্যারামিটার গ্রহণ করার জন্য গেসেসিওন পদ্ধতিটি ওভারলোড করুন এবং নীচের মত বর্তমান অধিবেশনটি ফেরার আগে সেশনটি সাফ করুন

    public static Session getSession(boolean isSessionClear) {
        if (session.isOpen() && isSessionClear) {
            session.clear();
            return session;
        } else if (session.isOpen()) {
            return session;
        } else {
            return sessionFactory.openSession();
        }
    }

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


1

আমারও একই সমস্যা ছিল। আমার ক্ষেত্রে আমি সেট করতে ভুলে গিয়েছিলেন increment_byদ্বারা ব্যবহৃত এক মত একই ডাটাবেসের মধ্যে মান cache_sizeএবং allocationSize। (তীরগুলি উল্লিখিত বৈশিষ্ট্যগুলিতে নির্দেশ করে)

এসকিউএল:

CREATED         26.07.16
LAST_DDL_TIME   26.07.16
SEQUENCE_OWNER  MY
SEQUENCE_NAME   MY_ID_SEQ
MIN_VALUE       1
MAX_VALUE       9999999999999999999999999999
INCREMENT_BY    20 <-
CYCLE_FLAG      N
ORDER_FLAG      N
CACHE_SIZE      20 <-
LAST_NUMBER     180

জাভা:

@SequenceGenerator(name = "mySG", schema = "my", 
sequenceName = "my_id_seq", allocationSize = 20 <-)

1

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

আশা করি আমি সাহায্য করেছি ;-)


1

আমার একই ত্রুটি আছে যে আমি আমার সেটটি জ্যাকসনের কাছ থেকে নতুন পেয়ে যাচ্ছি rep

এটি সমাধানের জন্য আমি বিদ্যমান সেটটি রাখি, আমি পুরানো সেট থেকে অজানা উপাদানটিকে নতুন তালিকার সাথে অপসারণ করব retainAll। তারপরে আমি নতুনদের সাথে যুক্ত করব addAll

    this.oldSet.retainAll(newSet);
    this.oldSet.addAll(newSet);

সেশনটি করার এবং এটির কারসাজির দরকার নেই।


1

এটা চেষ্টা কর. নীচে আমার জন্য কাজ করেছে!

ইন hbm.xmlফাইল

  1. আমাদের এখানে dynamic-updateশ্রেণীর ট্যাগের বৈশিষ্ট্যটি সেট করতে হবে true:

    <class dynamic-update="true">
  2. অনন্য কলামের অধীনে জেনারেটরের ট্যাগের শ্রেণীর বৈশিষ্ট্যটি এতে সেট করুন identity:

    <generator class="identity">

দ্রষ্টব্য: identityপরিবর্তে অনন্য কলাম সেট করুন assigned


0

আর একটি জিনিস যা আমার পক্ষে কাজ করেছিল তা হ'ল উদাহরণটিকে দীর্ঘ স্থানে পরিবর্তনশীল লং করা


আমার আমার প্রাথমিক কী ভেরিয়েবল লং আইডি ছিল; এটিকে লং আইডিতে পরিবর্তন করা; কাজ করছে

শুভকামনা


0

আপনি সর্বদা একটি সেশন ফ্লাশ করতে পারেন। ফ্লাশটি আপনার সমস্ত বস্তুর স্থিতির সময়টির সিঙ্ক্রোনাইজ করবে (দয়া করে, আমি ভুল হলে কেউ আমাকে সংশোধন করে) এবং সম্ভবত এটি কিছু ক্ষেত্রে আপনার সমস্যার সমাধান করবে your

আপনার নিজের সমতুল্য এবং হ্যাশকোড প্রয়োগ করা আপনাকেও সহায়তা করতে পারে।


0

আপনি আপনার ক্যাসকেড সেটিংস চেক করতে পারেন। আপনার মডেলগুলিতে ক্যাসকেড সেটিংস এর কারণ হতে পারে। আমি ক্যাসকেড সেটিংস মুছে ফেলেছি (মূলত ক্যাসকেড সন্নিবেশ / আপডেটের অনুমতি দেয় না) এবং এটি আমার সমস্যার সমাধান করে


0

আমি এই ত্রুটিটিও পেয়েছি। আমার পক্ষে যা কাজ করেছে তা নিশ্চিত করা যে প্রাথমিক কী (যেটি স্বয়ংক্রিয়ভাবে উত্পাদিত) পিডিটি নয় (যেমন দীর্ঘ, অন্তর্নিহিত, ect।) নয়, তবে একটি বস্তু (যেমন লং, পূর্ণসংখ্যা ইত্যাদি) is

আপনি যখন এটি সংরক্ষণ করার জন্য আপনার অবজেক্টটি তৈরি করেন, তখন নিশ্চিত হয়ে নিন যে আপনি 0 নਾਲকে পাস করেছেন।



0

আমি এর মতো একটি অনুরূপ সমস্যার সমাধান করেছি:

plan = (FcsRequestPlan) session.load(plan.getClass(), plan.getUUID());
while (plan instanceof HibernateProxy)
    plan = (FcsRequestPlan) ((HibernateProxy) plan).getHibernateLazyInitializer().getImplementation();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.