Является ли мой метод запросов JPA правильным? - PullRequest
0 голосов
/ 09 октября 2011

Я использую JPA в своем веб-приложении, и когда я не хочу, чтобы БД возвращала все объекты, я делаю что-то вроде:

    Query query = super.entityManager.createQuery("select b.id, b.buyName from Buy b where b.id in (:list)");
    query.setParameter("list", buyIds);

    List<Object[]> result = query.getResultList();
    List<Buy> retval = new ArrayList<Buy>();

    for (Object[] item : result) {
        Buy buy = new Buy();
        buy.setId((Long)item[0]);
        buy.setBuyName((String)item[1]);
        retval.add(buy);
    }

    return retval;

То есть, запрашивая нужные поля, а затем вручнуюсоздать список нужного объекта и заполнить его.Это хорошая практика?Такое ощущение, что есть лучший способ сделать это.

Спасибо.

Ответы [ 4 ]

1 голос
/ 09 октября 2011

Возможно, вам следует создать отдельный легкий POJO (только с обязательными полями) и затем сопоставить результат с этим POJO.

1 голос
/ 09 октября 2011

Можно напрямую вернуть новый объект из запроса, используя только ту информацию, которая вам нужна.Например, ваш запрос будет выглядеть следующим образом:

select new BuyDTO(b.id, b.buyName) from Buy b where b.id in (:list) 

И объект передачи данных будет включать только необходимые поля:

public class BuyDTO {

    private Long id;
    private String buyName;

    public BuyVO(Long id, String name) {
        this.id = id;
        this.buyName = name;
    }

    // getters and setters

}

Когда запрос выполняется, он возвращаетList<BuyDTO>

1 голос
/ 09 октября 2011
0 голосов
/ 11 октября 2011

Если вы используете EclipseLink, вы также можете установить FetchGroup в запросе, чтобы определить, какие поля вы хотите вернуть.

См, http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...