@ElementCollection Сохраняемость Java (Hibernate) вызывает загрузку повторяющихся экземпляров

При использовании @ElementCollection загрузить все - это загрузка нескольких экземпляров объекта. Более конкретно, он загружает один экземпляр для каждого элемента в collectionOfStrings.

Например, база данных с одним экземпляром MyClass с collectionOfStrings.size () == 4, вызов загрузки всех значений MyClass вернет список размером 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

Edit: добавлен вызов findByCriteria.

11
задан HeavyE 19 July 2011 в 19:58
поделиться