EBeans альтернатива find() в JPA

#java #playframework #ebean

#java #playframework #ebean

Вопрос:

Я следил за игрой! Учебное пособие по созданию блога. Они используют JPA вместо EBEAN и используют функцию find(), которая расширяется из play.db.Jpa.Model . Я использую EBEAN и расширил его с помощью play.db.ebean.Модель. Однако, когда я использую функцию find(), она говорит, что такого метода не существует. Я провел некоторое исследование и посмотрел здесь: http://www.playframework.com/documentation/2.0/api/java/play/db/ebean/Model.html

и вот: http://www.playframework.com/documentation/2.0/api/java/play/db/ebean/Model .Finder.html

но нет упоминания о простом методе find() (есть и другие, такие как FindID(), но я не вижу, как они могут помочь). Есть ли альтернатива, которую я мог бы использовать в классе Model? Если нет, есть ли какие-либо другие классы, которые я мог бы легко использовать?

Редактировать:

Конкретная часть, которую мне нужно создать, — это метод connect() в классе User . В руководстве это описано как:

 In the User.java source, add the connect() method:

public static User connect(String email, String password) {
return find("byEmailAndPassword", email, password).first();
}
  

Какие еще варианты у меня есть для этого, если я не могу использовать find(). Будет ли ebean.find() работать?

Комментарии:

1. Какую версию Play вы используете? Похоже, вы смотрите на это руководство для Play 1.2.x. В Play 2.3.x суперкласса модели JPA больше нет. Об использовании запросов Ebean читайте здесь в разделе «Использование play.db.ebean. Модель суперкласса» для примеров. Для получения дополнительной информации также см. Документы Ebean

2. Да, я использую 2.2.x. Я пытаюсь свободно следовать руководству, но заменяю JPA на EBEAN. Похоже, как я уже сказал, вам нужно использовать find . byId или что-то подобное. Что я могу использовать для той части руководства, о которой вы упомянули, где мне нужна функция find()? Спасибо.

3. Хм, я просматривал ‘Ebean.find’ в документах, которые были связаны. Есть ли какой-нибудь способ, которым я мог бы это использовать? Все примеры предназначены для поиска порядка (?), И я не могу найти много информации в другом месте по ‘bean.find’.

4. Ebean.find() предоставляет удобный API для прагматичного построения запросов. Однако, если вы ищете более SQL-подобный подход, вы также можете передать строку запроса. Посмотрите на последние два примера в этом документе для примеров обоих. Если вы добавите к своему вопросу более конкретно, что вы хотите сделать, я мог бы помочь вам с примерами и т. Д.

5. Я добавляю конкретный случай.

Ответ №1:

Я знаю о двух способах использования метода find() из play.db.ebean.Модель. Первый из них выглядит следующим образом:

 User user = Ebean.find(User.class, id);
  

Второй метод будет примерно таким:

 //define a Model.finder class in the User model class
 //The first parameter would be the datatype of the id used, which is String in my case
public static Model.Finder<String,User> find = new Model.Finder<String,User>(String.class, User.class);
User user = User.find.byId(id);
  

Поскольку ваш запрос извлекает данные на основе двух значений, ваш код должен выглядеть примерно так:

 User.find.where()
            .eq("email", email).eq("password",password)
            .findUnique();