Spring Framework

HibernateTemplate.loadAll(clazz) method returns duplicate entries

Details

  • Type: Improvement Improvement
  • Status: Resolved Resolved
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 2.5.5
  • Fix Version/s: 2.5.6
  • Component/s: None
  • Virtual Machine:
    Sun JVM - 1.5
  • Platform:
    Tomcat - 5.5
  • Description:
    Hide

    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);

    Show
    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);

Activity

Juergen Hoeller made changes - 16/Jul/08 7:07 AM
Field Original Value New Value
Fix Version/s 2.5.6 [ 10968 ]
Assignee Juergen Hoeller [ juergen.hoeller ]
Juergen Hoeller made changes - 16/Jul/08 7:07 AM
Issue Type Bug [ 1 ] Improvement [ 4 ]
Juergen Hoeller made changes - 16/Jul/08 7:07 AM
Status Open [ 1 ] Resolved [ 5 ]
Resolution Fixed [ 1 ]

People

Dates

  • Created:
    15/Jul/08 7:26 AM
    Updated:
    16/Jul/08 7:07 AM
    Resolved:
    16/Jul/08 7:07 AM