@ElementCollection का उपयोग करते समय लोड करें ऑब्जेक्ट के कई उदाहरण लोड हो रहा है। अधिक विशेष रूप से, यह संग्रह OfStrings में प्रत्येक तत्व के लिए एक उदाहरण लोड कर रहा है।@ElementCollection Java Persistence (हाइबरनेट) कारण डुप्लिकेट इंस्टेंस की लोडिंग
उदाहरण के लिए, संग्रह के साथ MyClass के एक उदाहरण के साथ एक डेटाबेस डेटाबेस OfStrings.size() == 4, सभी MyClass मानों को लोड करने के लिए कॉल केवल 1 ऑब्जेक्ट की बजाय आकार 4 (सभी समान ऑब्जेक्ट) की सूची लौटाएगा ।
क्या इसका समाधान करने के लिए कोई साफ और आसान तरीका है या व्यवहार अपेक्षित है?
// Parent class is a @MappedSuperclass which may or may not be relevant to the issue
@Entity
public class MyClass extends ParentClass {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ElementCollection(fetch=FetchType.EAGER)
@IndexColumn(name="indexColumn")
private List<String> collectionOfStrings;
// other instance variables, constructors, getters, setters, toString, hashcode and equals
}
public class MyClassDAO_Hibernate extends GenericHibernateDAO<MyClass, Long> implements MyClassDAO {
@Override
public List<MyClass> loadAll() {
List<MyClass> entityList = null;
Session session = getSession();
Transaction trans = session.beginTransaction();
entityList = findByCriteria(session);
trans.commit();
return entityList;
}
}
protected List<T> findByCriteria(Session session, Criterion... criterion) {
Criteria crit = session.createCriteria(getPersistentClass());
for (Criterion c : criterion) {
crit.add(c);
}
return crit.list();
}
MyClassDAO myClassDAO = new MyClassDAO_Hibernate(); // in reality, implementation type is determined with a Factory
...
List<MyClass> myClassInstances = myClassDAO.loadAll();
धन्यवाद, HeavyE
संपादित करें: findByCriteria कॉल गयी।
आप संस्थाओं को कैसे लोड करते हैं? – axtavt
एक्स्टावट, मैंने अपने खोज में जोड़ा है बायक्रिटारिया विधि जिसे मैंने मूल रूप से शामिल करने के लिए उपेक्षित किया था। – HeavyE