Как выбрать только необходимые поля в Playframework с помощью JPA - PullRequest
3 голосов
/ 22 августа 2011

Я недавно поиграл с платформой Play! И обнаружил, что она великолепна, особенно модель с использованием JPA.Это помогает ускорить процесс разработки.Однако, как было рекомендовано, мы должны только выбирать необходимые поля в запросе, а не выбирать *.Как я могу использовать JPA, чтобы выбрать некоторые поля вместо всех?Обязательно ли использовать JPQL?

Ответы [ 3 ]

7 голосов
/ 24 августа 2011

Если вы хотите использовать проекции, вы можете использовать Play!Прямой запрос JPA:

JPA.em().createQuery("select title,author from Article");
Article.find("select title from Article");

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

2 голосов
/ 22 августа 2011

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

Таким образом, при использовании не существует такой вещи, как «вернуть только несколько полей».Это применимо, если вы используете сырой SQL (jdbc).

При использовании JPQL Play предлагает несколько вспомогательных методов для упрощения запросов (см. документация ), но в противном случае да, вы должны использовать JPQL.

1 голос
/ 16 января 2012

хотя сейчас лучше использовать сущности, расширяющие play.models.Однако вы можете выбрать значение, полученное в результате запроса, напечатав результат следующим образом:

public static void myfunction(Long id)
{
    String sqlQuery = "SELECT id FROM mytable WHERE propertie="+id;
    Long resultId = Mytable.find(sqlQuery).first();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...