2014-02-11 3 views
0

В sql вы можете легко выбрать несколько столбцов из всей таблицы. Как вы достигаете такой вещи в JPA? И это не мой главный вопрос. Это скорее дизайн.JPA извлечения части объекта

Предположим, у меня есть родительский объект с некоторыми информационными полями и набор полей дочерних объектов с одним соединением.

@Entity 
@Table(name = "code") 
public class CodeList extends Code { 

     /** The code list's values. */ 
     @OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) 
     @JoinColumn(name = "codeListId") 
     private List<CodeValue> codeValues; 


     /** The code list's display type. */ 
     @Column(length = 255, name = "DISPLAY_TYPE") 
     private String displayType; 
.... 

Я пытаюсь реализовать службу отдыха с использованием JPA (Hibernate) и JAX-RS, но что, если я хочу, чтобы моя служба, чтобы быть в состоянии получить только информацию о Codelist (displayType) или просто сбор из codeValues ​​без какого-либо дополнительного контроля производительности (обнуление объектов) или извлечения из базы данных дополнительных данных, которые мне не нужны?

ответ

1

По умолчанию отношения @OneToMany ленив.

простое значение:

SELECT c.displayType FROM CodeList c WHERE c.id=:id 

отношения

SELECT v FROM CodeList c LEFT JOIN c.codeValues v WHERE c.id=:id 
1

Используйте JPQL, чтобы определить, какие значения вы хотите получить.

select e.displayType from CodeList e 

ИЛИ

select e from CodeList d left join fetch d.codeValues e 
+0

я думаю, что это не будет работать с ключевым словом 'выборки'. мы используем «выборку», когда пытаемся получить родительский объект (d в этом случае). можете ли вы это подтвердить? –

+0

Как onetoMany ленив, я использовал fetch, чтобы принести ему значения. fetch получить значения для ленивых атрибутов (коллекции или нет). – Koitoer

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