2015-01-09 10 views
10

पर काम नहीं करता है मेरे पास 2 टेबल हैं: Order [OrderId(PK), OrderShipmentCode, ...] और Shipment[ShipmentId(PK), ShipmentCode, ...]हाइबरनेट: @ManyToOne (fetch = FetchType.LAZY) गैर प्राथमिक कुंजी संदर्भित कॉलम

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "OrderShipmentCode", referencedColumnName = "ShipmentCode", insertable = false, updatable = false, nullable = false) 
private Shipment shipment; 

जब मैं Order की सूची प्राप्त, Shipment भी भरी हुई है (मैं कई अलग चयन प्रश्नों देखा था):

Order वर्ग में, मैं shipment क्षेत्र इस प्रकार की घोषणा की। लेकिन मैं Shipment आलसी लोड होने के लिए चाहता हूं, Order के साथ एक साथ नहीं लाया जाना चाहिए।

अन्य तालिकाओं के लिए, यदि संदर्भित कॉलम प्राथमिक कुंजी है तो परिणाम अपेक्षित हैं (आलसी लोडिंग का उपयोग किया जाता है)। मेरे मामले में, ShipmentCodeShipment तालिका की प्राथमिक कुंजी नहीं है, और आलसी लोडिंग का उपयोग हाइबरनेट द्वारा नहीं किया जाता है।

क्या आप मुझे दिखा सकते हैं कि उस लक्ष्य को कैसे पूरा किया जाए?

संपादित करें: क्वेरी कोड के रूप में bellow है:

Criteria criteria = HibernateUtil.getSessionFactory().getCurrentSession().createCriteria(Order.class); 
List result = criteria.list(); 

एसक्यूएल प्रश्नों हैं: और Order तालिका के लिए 1 SELECT कथन Shipment

+0

आप मापदंड या क्वेरी के लिए कोड दिखा सकते हैं? – RAS

उत्तर

0

के लिए SELECT कथन का एक समूह आप optional = false निर्दिष्ट करने की आवश्यकता :

@OneToOne(optional = false, fetch = FetchType.LAZY) 

या बस टी एक @ManyToOne में कलश:

@ManyToOne(fetch = FetchType.LAZY) 
+3

धन्यवाद। मैंने पहले ही आपके समाधान की कोशिश की है लेकिन परिणाम एक ही –

+0

मेरा अद्यतन उत्तर –

+2

जांचें मैंने आपके अपडेट किए गए उत्तर के साथ भी परीक्षण किया लेकिन परिणाम अभी भी वही हैं। –

0

इस प्रयास करें: निकाले जाने

Criteria criteria = HibernateUtil.getSessionFactory() 
           .getCurrentSession() 
           .createCriteria(Order.class) 
           .setFetchMode("shipment", FetchMode.LAZY); 
+1

कृपया अपने समाधान में स्पष्टीकरण जोड़ें – user7294900

संबंधित मुद्दे