Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > JPA, Hibernate и наследование


Автор: Norby89 16.3.2012, 19:34
Есть две сущности. Если упрощенно, выглядят так:
Код

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Entity1 implements Serializable {
   ...
}

@Entity
public class Entity2 extends Entity1 {
   ...
}


В дао делаю выборку хибером:
Код

getSession().createCriteria(Entity1.class)
        .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();

В итоге получаю List, в котором лежат все экземпляры обоих сущностей. Как сделать так, чтобы в результате я получил список только Entity1?

Автор: Shaggie 16.3.2012, 23:08
Если иерархия Entity объектов явно прописана на уровне базы (это делается http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/inheritance.html), то можно достать экземпляры исключительно базового класса, указав его discriminator в специальном поле class:
Код

getSession().createCriteria(Entity1.class)
        .add(Restrictions.eq("class", yourBaseClassDiscriminatorValue)
        .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)