किसी सूची से किसी आइटम को हटाते समय मुझे परेशानी हो रही है। सूची को सुपरक्लास में परिभाषित किया गया है, लेकिन हाइबरनेट एनोटेशन को उप-वर्ग में संपत्ति एक्सेसर्स पर लागू किया जाता है। सुपरक्लास में दो विधियां हैं जो सूची में हेरफेर करती हैं। "एड" विधि ठीक काम करती है, लेकिन "निकालें" परिवर्तनों को जारी नहीं रखता है। मैंने अपनी कैस्केड सेटिंग्स की जांच की है, और मुझे लगता है कि चीजें सही हैं। क्या मैं ऐसा कुछ कर रहा हूं जो असंभव है। यदि नहीं, तो क्या मैं कुछ गलत तरीके से कर रहा हूं?हाइबरनेट: किसी सूची से आइटम को निकालना
यहाँ मेरी वर्ग हैं:।
@Entity
abstract class Temporal<T> {
@Id
@GeneratedValue
private Long id;
@Version
private Integer version = null;
@Transient
protected List<T> content = new ArrayList<T>();
public void remove(T value) {
// business logic ...
content.remove(value);
}
public void add(T value) {
// business logic ...
content.add(value);
}
}
@Entity
@AccessType("property")
class TemporalAsset extends Temporal<Asset> {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "temporal")
public List<Asset> getContent() {
return super.content;
}
protected void setContent(List<Asset> list) {
super.content = list;
}
}
मैं TemporalAsset वर्ग का एक उदाहरण के रूप में उपयोग (ध्यान दें कि मैं केवल व्यवहार प्रदर्शित करने के लिए "ताज़ा" विधि का उपयोग कर रहा हूँ इस प्रकार सूची सही तरीके से भी मौजूद नहीं होता अगर मैं सत्र को फ्लश या बंद करता हूं और एक नया सत्र खोलता हूं):
temporalAsset.add(value1);
temporalAsset.getContent().size() == 1; // true
session.update(temporalAsset);
session.refresh(temporalAsset);
temporalAsset.getContent().size() == 1; // true
temporalAsset.remove(value1);
temporalAsset.getContent().size() == 0; // true
session.update(temporalAsset);
session.refresh(temporalAsset);
temporalAsset.getContent().size() == 0; // false, its 1
धन्यवाद।
वह था! बहुत बहुत धन्यवाद – codefinger
CascadeType.DELETE_ORPHAN बहिष्कृत है। क्या कोई विकल्प है? –
http://nocs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/CascadeType.html – FoxyBOA