मैं ग्लासफ़िश 4 (एक्लिप्ससेंक) + जावाडीबी का उपयोग कर कुछ EJB3 in Action उदाहरणों को आजमा रहा हूं। इसलिए मैं अब जब item.getBids()
रिटर्न एक खाली सूची (आकार = 0, रिक्त नहीं) की तरहजेपीए प्राप्त करना @OneToMany संग्रह खाली
@Override
public List<Bid> getBidsForItem(long itemId) {
Item item = em.find(Item.class, itemId); // em -> Entity manager
return item.getBids();
}
एक आइटम प्राप्त करते समय नीचे संबंध
@Entity
@Table(name = "ITEMS")
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
private Long itemId;
...
private List<Bid> bids= new ArrayList<>();
@Id
@Column(name="ITEM_ID")
public Long getItemId() {
return itemId;
}
public void setItemId(Long itemId) {
this.itemId = itemId;
}
@OneToMany(mappedBy="item",fetch=FetchType.EAGER)
@JoinColumn(name="BID_ITEM_ID",referencedColumnName="ITEM_ID")
public List<Bid> getBids() {
return bids;
}
public void setBids(List<Bid> bids) {
this.bids = bids;
}
}
@Entity
@Table(name="BIDS")
public class Bid implements Serializable{
private static final long serialVersionUID = 1L;
...
private Item item;
...
@Id
@Column(name="BID_ID")
public Long getBidId() {
return bidId;
}
public void setBidId(Long bidId) {
this.bidId = bidId;
}
@ManyToOne
@JoinColumn(name="BID_ITEM_ID",referencedColumnName="ITEM_ID")
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
...
}
है। दिए गए आइटम के लिए बोलियां प्राप्त करने के लिए क्या परिवर्तन किए जाने चाहिए?
संपादित करें:
के रूप में टिप्पणी
<property name="eclipselink.logging.level.sql" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
मैं देखा कि प्रश्नों डालने बयानों के लिए सूचीबद्ध किया गया है में सुझाव दिया है, लेकिन कोई क्वेरी em.find(Item.class, itemId)
करने के लिए इसी सूचीबद्ध है क्वेरी लॉगिंग सक्षम करने के बाद।
संपादित 2 (उत्तर):
समस्या मेरी addBids में था() राज्यविहीन सेम समारोह जो मैं एक आइटम वस्तु गुजर रहा था करने के लिए। इसका मतलब है कि आइटम ऑब्जेक्ट लगातार संदर्भ में नहीं है। सही तरीके से Itemid
- है। यह सुनिश्चित करता है कि आइटम ऑब्जेक्ट दृढ़ता संदर्भ में है।
- बोली पर
- बोली इकाई प्रबंधक प्रबंधक() बोली लगाने के लिए आइटम और आइटम पर बोली वस्तु जोड़ें।
सही addBids() विधि: उनका कहना है के लिए @Chris को
public Bid addBids(Date bidDate, Double bidPrice, long itemId, String bidder) {
Item item = em.find(Item.class, itemId);
Bid bid = new Bid(bidDate, bidPrice, item, bidder);
item.getBids().add(bid);
em.persist(bid);
return bid;
}
धन्यवाद।
क्या डेटाबेस में उचित डेटा है? –
@ केविन बॉवर्सॉक्स - हाँ। ITEM_ID = 100 के साथ आइटम कहें BID_ID (5000, 5001) और BID_ITEM_ID = 100 के साथ दो बोलियां हैं। –
आप निष्पादित SQL क्वेरी क्यों नहीं देखते हैं (Google EclipseLink में क्वेरी लॉगिंग को सक्षम करने के लिए कैसे करें)? क्या आप वाकई सही डीबी का उपयोग करते हैं या तो ...? –