HibernateTemplate.loadAll(clazz) returns duplicate entries if the Class 'clazz' contains collection field and database contains entry related to that collection field.
for example,
A Customer contains list of Product (one-to-many).
In database say there are Products p1,p2 for customer c1 and Product p3 for Customer c2.
Now ..loadAll(Customer.class) returns a list contains {c1,c1,c2}.
related class: org.springframework.orm.hibernate3.HibernateTemplate
related method:
public List loadAll(final Class entityClass) throws DataAccessException {
return (List) executeWithNativeSession(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Criteria criteria = session.createCriteria(entityClass);
prepareCriteria(criteria);
return criteria.list();
}
});
}
Possible Solution:
changing the line
Criteria criteria = session.createCriteria(entityClass);
to
Criteria criteria = session.createCriteria(entityClass).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);