2014-02-10 2 views
1

У меня есть @OneToMany отношения между Parent & Child таблиц Вместе они имеют более 100 столбцов. Для отчетности по соображениям производительности мне нужно только подмножество этих полей.Hibernate возвращение подмножество родителя и ребенок приводит к

Я могу успешно запросить подмножество Parent полей, возвращая пользовательский объект, используя что-то вроде:

"SELECT NEW com.myapp.domain.wrapper.viewdto.ParentDTO(p.name,...) FROM Parent p" 

Но что мне нужно, так же заполнить коллекцию Чайлдс внутри ParentDTO внутри одного запроса. ParentDTO & ChildDTO содержит подмножество столбцов обеих таблиц.

class ParentDTO{ 
    String field1; 
    List<ChildDTO> childs; 
    .. 
} 

Можно ли заполнить List<ChildDTO> childs выше, используя подобный запрос, как указано выше?

+0

Вы можете найти некоторые образцы здесь - Http: //docs.jboss .org/спящий режим/ОРМ/3,3/ссылки/EN-US/html/queryhql.html # queryhql-соединения. Я не уверен, что использование выражения Constructor имеет значение. Я бы предпочел использовать сущности в запросе, иногда использование выражения конструктора может уменьшить ремонтопригодность запроса. –

+0

Но я не хочу запрашивать ненужные столбцы parent & child. Мне нужно лишь небольшое подмножество из них. Спасибо – isah

ответ

1

Да, возможно заполнить список с помощью запроса запроса parent. Необходимо сопоставить отношения в классе сущности родителя и ребенка.

Для примера рассмотрит два Entity CAR & типа -> CAR имеет много типа:

В Entity CAR:

@OneToMany(mappedBy="car") 
    private List<Type> types; 

    add to Type class: 

    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="Typeid") 
    Cars car; 

и их соответствующие сеттер и добытчик.

Вы также можете иметь для каскадного родителю и дочерней таблицы в направлении наоборот как в этом примере:

@Entity 
    public class Car{ 
     ... 
     ... 
     @OneToMany(mappedBy="car", orphanRemoval=true, cascade={CascadeType.ALL}) 
     private List<Type> types; 
     ... 
    } 

и когда вы будете получать запрос на выборку для родителей, вы получите список из ребенка слишком. И наоборот, также, как с помощью cascadeType.All

Для получения дополнительной информации о получении суб-данные с родительского вызова идут here:

+0

Дело в том, что эти пользовательские объекты не являются спящими объектами, так как они содержат подмножество столбцов реальных таблиц. Если я определяю их как сущности, Hibernate будет жаловаться, не найдя таблицы, или попытается их создать? – isah

Смежные вопросы