ข้อผิดพลาดไฮเบอร์เนต: 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/…
Reddymails

คำตอบ:


173

ฉันมีข้อผิดพลาดนี้หลายครั้งและมันค่อนข้างยากที่จะติดตาม ...

โดยทั่วไปสิ่งที่จำศีลกำลังพูดคือคุณมีวัตถุสองชิ้นที่มีตัวระบุเดียวกัน (คีย์หลักเดียวกัน) แต่ไม่ใช่วัตถุเดียวกัน

ฉันขอแนะนำให้คุณแยกรหัสของคุณออกเช่นแสดงความคิดเห็นออกเป็นบิตจนกว่าข้อผิดพลาดจะหายไปจากนั้นใส่รหัสกลับจนกว่าจะกลับมาและคุณจะพบข้อผิดพลาด

ส่วนใหญ่มักเกิดขึ้นผ่านการบันทึกแบบเรียงซ้อนเมื่อมีการบันทึกแบบเรียงซ้อนระหว่างอ็อบเจ็กต์ A และ B แต่อ็อบเจ็กต์ B ได้เชื่อมโยงกับเซสชันแล้ว แต่ไม่ได้อยู่ในอินสแตนซ์ของ B เช่นเดียวกับ A ใน A

คุณใช้ตัวสร้างคีย์หลักอะไร

เหตุผลที่ฉันถามคือข้อผิดพลาดนี้เกี่ยวข้องกับวิธีที่คุณบอกให้จำศีลเพื่อตรวจสอบสถานะถาวรของวัตถุ (เช่นวัตถุนั้นคงอยู่หรือไม่) ข้อผิดพลาดอาจเกิดขึ้นเนื่องจากไฮเบอร์เนตพยายามที่จะคงอยู่ของวัตถุที่คงอยู่แล้ว ในความเป็นจริงถ้าคุณใช้ save hibernate จะพยายามและคงอยู่กับออบเจ็กต์นั้นและอาจมีออบเจ็กต์ที่มีคีย์หลักเดียวกันกับเซสชันนั้นอยู่แล้ว

ตัวอย่าง

สมมติว่าคุณมีอ็อบเจ็กต์คลาสไฮเบอร์เนตสำหรับตารางที่มี 10 แถวตามคีย์ผสมหลัก (คอลัมน์ 1 และคอลัมน์ 2) ตอนนี้คุณได้ลบ 5 แถวออกจากตารางในบางช่วงเวลา ตอนนี้หากคุณพยายามเพิ่ม 10 แถวเดียวกันอีกครั้งในขณะที่ไฮเบอร์เนตพยายามคงวัตถุในฐานข้อมูล 5 แถวที่ถูกลบไปแล้วจะถูกเพิ่มโดยไม่มีข้อผิดพลาด ตอนนี้เหลืออีก 5 แถวที่มีอยู่แล้วจะทำให้เกิดข้อยกเว้นนี้

ดังนั้นวิธีง่ายๆคือการตรวจสอบว่าคุณได้อัปเดต / ลบค่าใด ๆ ในตารางซึ่งเป็นส่วนหนึ่งของบางสิ่งบางอย่างแล้วคุณกำลังพยายามแทรกวัตถุเดียวกันอีกครั้งในภายหลัง


4
คำตอบที่ดี² คีย์หลักคือปัญหาของฉันแก้ไขได้ด้วย GeneratedValue ที่ตั้งค่าลำดับสำหรับ postgresql
Rodrigo Ferrari

2
ฉันมีปัญหาเดียวกัน ในกรณีของฉันฉันมีวัตถุที่ค้นหาในรหัสและฉันพยายามสร้างวัตถุใหม่ที่มีรหัสเดียวกันในรหัสส่วนอื่นในขณะที่วัตถุชิ้นแรกยังอยู่ในช่วงของการจำศีล
dellasavia

18

นี่เป็นเพียงจุดเดียวที่การจำศีลสร้างปัญหามากกว่าที่จะแก้ได้ ในกรณีของฉันมีวัตถุจำนวนมากที่มีตัวระบุ 0 เหมือนกันเนื่องจากเป็นวัตถุใหม่และไม่มี ฐานข้อมูลสร้างขึ้น บางแห่งฉันได้อ่านว่าไม่ได้ตั้งค่ารหัส 0 สัญญาณ วิธีที่ใช้งานง่ายในการคงอยู่คือการทำซ้ำและพูดว่าจำศีลเพื่อบันทึกวัตถุ แต่คุณทำอย่างนั้นไม่ได้ - "แน่นอนคุณควรรู้ว่าการจำศีลทำงานแบบนี้และแบบนั้นดังนั้นคุณต้อง .. " ตอนนี้ฉันสามารถลองเปลี่ยน Ids เป็น Long แทนที่จะเป็น long และดูว่ามันได้ผลหรือไม่ ในที่สุดการทำแผนที่ง่ายๆด้วยตัวคุณเองก็ง่ายกว่าเพราะการจำศีลเป็นเพียงภาระที่ไม่โปร่งใสเพิ่มเติม อีกตัวอย่างหนึ่ง: การพยายามอ่านพารามิเตอร์จากฐานข้อมูลหนึ่งและยังคงอยู่ในอีกฐานข้อมูลหนึ่งบังคับให้คุณทำงานเกือบทั้งหมดด้วยตนเอง


13
ฉันเกลียดการจำศีลเหมือนกัน ... และฐานข้อมูล ... หลังจากปัญหาทั้งหมดที่ทำให้ฉันฉันคิดว่ามันง่ายกว่าที่จะใช้ไฟล์ข้อความ (ฉันล้อเล่น แต่ก็ยัง ... )
Igor Popov

ในกรณีของฉันมีวัตถุจำนวนมากที่มีตัวระบุ 0 เหมือนกันเนื่องจากเป็นวัตถุใหม่และไม่มี ฐานข้อมูลสร้างขึ้น บางแห่งฉันได้อ่านว่าไม่ได้ตั้งค่ารหัส 0 สัญญาณ วิธีที่ง่ายที่จะยังคงมีอยู่ในนั้นคือการทำซ้ำมากกว่าพวกเขาและพูดว่าจำศีลเพื่อบันทึกวัตถุ ฉันต้องทำแบบนี้ คุณช่วยบอกฉันได้ไหมว่าวิธีใดเป็น "วิธีจำศีล" ในการทำสิ่งนี้
Ramses

ในกรณีของฉันฉันต้องใช้ session.merge (myobject) เนื่องจากฉันมีสองอินสแตนซ์ของอ็อบเจ็กต์นี้โดยปกติจะเกิดขึ้นเมื่อเอนทิตียังคงอยู่และแยกออกจากเซสชัน อินสแตนซ์อื่นของเอนทิตีนี้ถูกร้องขอให้จำศีล อินสแตนซ์ที่สองนี้ติดอยู่กับเซสชัน มีการแก้ไขอินสแตนซ์แรก เพิ่มเติมได้ที่ getj2ee.over-blog.com/…
Reddymails

ไม่ใช่การจำศีลที่ทำให้เกิดปัญหา แต่ขาดความเข้าใจว่ามันทำงานอย่างไร
ACV

17

ใช้session.evict(object);ฟังก์ชันของevict()วิธีการใช้เพื่อลบอินสแตนซ์ออกจากแคชเซสชัน ดังนั้นในการบันทึกวัตถุเป็นครั้งแรกให้บันทึกวัตถุโดยเรียกsession.save(object)วิธีการก่อนที่จะขับไล่วัตถุออกจากแคช ในทำนองเดียวกันอัปเดตวัตถุโดยการเรียกsession.saveOrUpdate(object)หรือsession.update(object)ก่อนที่จะเรียกขับไล่ ()


11

สิ่งนี้สามารถเกิดขึ้นได้เมื่อคุณใช้วัตถุเซสชันเดียวกันในการอ่านและเขียน อย่างไร? สมมติว่าคุณได้สร้างหนึ่งเซสชัน คุณอ่านบันทึกจากตารางพนักงานด้วยคีย์หลัก Emp_id = 101 ตอนนี้คุณได้แก้ไขระเบียนใน Java แล้ว และคุณจะบันทึกประวัติพนักงานในฐานข้อมูล เราไม่ได้ปิดเซสชันที่นี่ เนื่องจากอ็อบเจ็กต์ที่อ่านยังคงอยู่ในเซสชัน มันขัดแย้งกับวัตถุที่เราต้องการเขียน ดังนั้นข้อผิดพลาดนี้เกิดขึ้น


9

ตามที่ใครบางคนชี้ไว้ข้างต้นฉันพบปัญหานี้เมื่อฉันมีcascade=allทั้งสองด้านของone-to-manyความสัมพันธ์ดังนั้นสมมติว่า A -> B (หนึ่งต่อกลุ่มจาก A และหลายต่อหนึ่งจาก B) และกำลังอัปเดตอินสแตนซ์ของ B ใน A แล้วเรียก saveOrUpdate (A) มันส่งผลให้เกิดการร้องขอการบันทึกแบบวงกลมเช่นบันทึกของทริกเกอร์บันทึก B ที่ทริกเกอร์บันทึกของ A ... และในอินสแตนซ์ที่สามเมื่อเอนทิตี (ของ A) ถูกพยายาม ถูกเพิ่มเข้าใน sessionPersistenceContext ข้อยกเว้น duplicateObject ถูกโยน
  ฉันแก้ได้โดยการเอาน้ำตกออกจากปลายด้านหนึ่ง


แก้ปัญหาของฉันด้วยstackoverflow.com/questions/4334970/…
Magno C

5

คุณสามารถใช้ได้session.merge(obj)หากคุณทำการบันทึกด้วยเซสชันที่แตกต่างกันโดยมีอ็อบเจ็กต์ถาวรตัวระบุเดียวกัน
มันได้ผลฉันเคยมีปัญหาเดียวกันมาก่อน


4

ฉันยังประสบปัญหานี้และพบข้อผิดพลาดอย่างยากลำบาก

ปัญหาที่ฉันพบมีดังต่อไปนี้:

Dao อ่านวัตถุด้วยช่วงจำศีลที่แตกต่างกัน

เพื่อหลีกเลี่ยงข้อยกเว้นนี้เพียงแค่อ่านวัตถุอีกครั้งด้วย dao ที่กำลังจะบันทึก / อัปเดตวัตถุนี้ในภายหลัง

ดังนั้น:

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. การลบวัตถุ (โดยใช้ HQL)
  2. จัดเก็บวัตถุใหม่ทันทีด้วยรหัสเดียวกัน

ฉันแก้ไขได้โดยล้างผลลัพธ์หลังการลบและล้างแคชก่อนบันทึกวัตถุใหม่

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

4

ปัญหานี้เกิดขึ้นเมื่อเราอัปเดตวัตถุเดียวกันของเซสชันซึ่งเราใช้ในการดึงวัตถุจากฐานข้อมูล

คุณสามารถใช้วิธีผสานไฮเบอร์เนตแทนวิธีการอัปเดต

เช่น First use session.get () จากนั้นคุณสามารถใช้ session.merge (object) วิธีนี้จะไม่สร้างปัญหาใด ๆ เรายังสามารถใช้เมธอด merge () เพื่ออัปเดตวัตถุในฐานข้อมูล


3

รับวัตถุภายในเซสชันตัวอย่างต่อไปนี้:

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

3
พยายามอย่างดี แต่อ็อบเจ็กต์ "ob" ถูกส่งคืนโดยไม่มีข้อมูลที่อัปเดต (พิจารณาว่าได้รับการอัปเดตผ่านแอปพลิเคชันระหว่างรันไทม์ระหว่างอ็อบเจ็กต์ที่ดึงข้อมูลจากฐานข้อมูลและการบันทึก)
Alex

2

การแมปรหัสของคุณถูกต้องหรือไม่ หากฐานข้อมูลมีหน้าที่สร้าง Id ผ่านตัวระบุคุณต้องแมปวัตถุผู้ใช้ของคุณกับสิ่งนั้น ..


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

ตรวจสอบว่าคุณลืมใส่ @GenerateValue สำหรับคอลัมน์ @Id หรือไม่ ฉันมีปัญหาเดียวกันกับความสัมพันธ์ระหว่างภาพยนตร์กับประเภทต่างๆ โปรแกรมส่ง Hibernate Error: org.hibernate.NonUniqueObjectException: ออบเจ็กต์อื่นที่มีค่าตัวระบุเดียวกันได้เชื่อมโยงกับข้อผิดพลาดของเซสชันแล้ว ฉันพบในภายหลังว่าฉันต้องแน่ใจว่าคุณมี @GenerateValue สำหรับ GenreId get method


ฉันจะใช้วิธีแก้ปัญหาของคุณกับคำถามของฉันได้อย่างไร ฉันจะสร้างคอลัมน์ id ในคลาสงานได้หรือไม่ stackoverflow.com/questions/55732955/…
sbattou

1

เพียงตรวจสอบ id ว่าใช้ null หรือ 0 like

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

ในการเพิ่มหรืออัปเดตที่เนื้อหาถูกตั้งค่าจากฟอร์มเป็น Pojo


1

ฉันเพิ่งเริ่มใช้ NHibernate และปัญหาของฉันคือฉันใช้เซสชันอื่นในการสืบค้นวัตถุของฉันมากกว่าที่ฉันทำเพื่อบันทึก ดังนั้นเซสชันการบันทึกจึงไม่ทราบเกี่ยวกับวัตถุ

ดูเหมือนชัดเจน แต่จากการอ่านคำตอบก่อนหน้านี้ฉันมองหาวัตถุ 2 ชิ้นทุกที่ไม่ใช่ 2 เซสชัน


1

@GeneratedValue (strategy = GenerationType.IDENTITY) การเพิ่มคำอธิบายประกอบนี้ในคุณสมบัติคีย์หลักในเอนทิตี bean ของคุณควรแก้ปัญหานี้ได้


1

ฉันแก้ไขปัญหานี้แล้ว
อันที่จริงสิ่งนี้เกิดขึ้นเนื่องจากเราลืมการใช้งานคุณสมบัติ Generator Type ของ PK ในคลาส bean ดังนั้นทำให้เป็นประเภทใดก็ได้เช่น

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

เมื่อเรายังคงวัตถุของ bean ทุกออบเจ็กต์จะได้รับ ID เดียวกันดังนั้นอ็อบเจ็กต์แรกจะถูกบันทึกเมื่ออ็อบเจ็กต์อื่นยังคงมีอยู่ดังนั้น HIB FW ผ่านException: org.hibernate.NonUniqueObjectException:อ็อบเจ็กต์ประเภทนี้ที่แตกต่างกันที่มีค่าตัวระบุเดียวกันจะเชื่อมโยงกับเซสชันแล้ว


1

ปัญหาเกิดขึ้นเนื่องจากในเซสชันไฮเบอร์เนตเดียวกันคุณพยายามบันทึกวัตถุสองชิ้นด้วยตัวระบุเดียวกันมีสองวิธีแก้ไข: -

  1. สิ่งนี้เกิดขึ้นเนื่องจากคุณไม่ได้กำหนดค่าไฟล์ mapping.xml ของคุณอย่างถูกต้องสำหรับฟิลด์ id ดังต่อไปนี้: -

    <id name="id">
      <column name="id" sql-type="bigint" not-null="true"/>
      <generator class="hibernateGeneratorClass"</generator>
    </id>
  2. โอเวอร์โหลดเมธอด getsession เพื่อยอมรับพารามิเตอร์เช่น isSessionClear และล้างเซสชันก่อนที่จะส่งคืนเซสชันปัจจุบันดังต่อไปนี้

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

สิ่งนี้จะทำให้วัตถุเซสชันที่มีอยู่ถูกล้างออกและแม้ว่าไฮเบอร์เนตจะไม่สร้างตัวระบุที่ไม่ซ้ำกัน แต่สมมติว่าคุณได้กำหนดค่าฐานข้อมูลของคุณอย่างถูกต้องสำหรับคีย์หลักโดยใช้บางอย่างเช่น Auto_Increment แต่ก็น่าจะเหมาะกับคุณ


1

ฉันมีปัญหาที่คล้ายกัน ในกรณีของฉันฉันลืมตั้งincrement_byค่าในฐานข้อมูลให้เหมือนกันเหมือนกับที่ใช้โดยcache_sizeและallocationSize. (ลูกศรชี้ไปที่คุณลักษณะที่กล่าวถึง)

SQL:

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

Java:

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

1

มิฉะนั้นสิ่งที่wbdarbyกล่าวไว้มันสามารถเกิดขึ้นได้เมื่อมีการดึงวัตถุโดยการให้ตัวระบุของวัตถุกับ HQL ในกรณีที่พยายามแก้ไขฟิลด์ออบเจ็กต์และบันทึกกลับเข้าไปใน DB (การแก้ไขอาจแทรกลบหรืออัปเดต) ในเซสชันเดียวกันข้อผิดพลาดนี้จะปรากฏขึ้น ลองล้างเซสชันไฮเบอร์เนตก่อนบันทึกออบเจ็กต์ที่แก้ไขของคุณหรือสร้างเซสชันใหม่ล่าสุด

หวังว่าฉันจะช่วย ;-)


1

ฉันมีข้อผิดพลาดเดียวกันกับที่ฉันเปลี่ยนชุดของฉันด้วยชุดใหม่ที่ได้รับจากแจ็คสัน

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">

หมายเหตุ: การตั้งค่าที่ไม่ซ้ำกับคอลัมน์มากกว่าidentityassigned


0

อีกอย่างที่ได้ผลสำหรับฉันคือทำให้ตัวแปรอินสแตนซ์ Long แทนที่ long


ฉันมีรหัสยาวของตัวแปรคีย์หลัก เปลี่ยนเป็นรหัสยาว ทำงาน

สิ่งที่ดีที่สุด


0

คุณสามารถทำเซสชันฟลัชได้เสมอ ฟลัชจะซิงโครไนซ์สถานะของวัตถุทั้งหมดของคุณในเซสชัน (โปรดมีคนแก้ไขฉันถ้าฉันผิด) และบางทีมันอาจจะช่วยแก้ปัญหาของคุณได้ในบางกรณี

การใช้งานเท่ากับและแฮชโค้ดของคุณเองอาจช่วยคุณได้เช่นกัน


0

คุณสามารถตรวจสอบการตั้งค่า Cascade ของคุณ การตั้งค่า Cascade ในโมเดลของคุณอาจทำให้เกิดปัญหานี้ ฉันลบการตั้งค่า Cascade (โดยพื้นฐานแล้วไม่อนุญาตให้มีการแทรก / อัปเดต Cascade) และสิ่งนี้ช่วยแก้ปัญหาของฉันได้


0

ฉันพบข้อผิดพลาดนี้เช่นกัน สิ่งที่ได้ผลสำหรับฉันคือการตรวจสอบให้แน่ใจว่าคีย์หลัก (ที่สร้างขึ้นโดยอัตโนมัติ) ไม่ใช่ PDT (เช่น long, int, ect) แต่เป็นวัตถุ (เช่น Long, Integer เป็นต้น)

เมื่อคุณสร้างวัตถุเพื่อบันทึกตรวจสอบให้แน่ใจว่าคุณผ่านค่า null ไม่ใช่ 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.