Подтвердить что ты не робот

Как вызвать Named Query

Я написал именованный запрос в классе объектов Voter

NamedQuery(name = "Voter.findvoter", query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password),

Я хочу вызвать этот именованный запрос, и мне также нужно установить идентификатор и пароль.

Вы можете мне помочь. Спасибо вам

4b9b3361

Ответ 1

Я предполагаю, что вы пропустили символ @в своей аннотации NamedQuery?

В коде вы бы назвали его следующим:

List results = em.createNamedQuery("Voter.findvoter")
    .setParameter("voterID", "blah")
    .setParameter("password","blahblahblah")
    .getResultList();

Ответ 2

В вашем именованном запросе возникают две очевидные проблемы, которые могут вызвать проблемы:

  • Это аннотация, поэтому она должна быть @NamedQuery не только NamedQuery
  • Ваш запрос:

query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password.

Проблема в том, что вы завершаете свою строку после :voterID, а не после :password, и у вас есть "where" дважды, и у вас есть пробел между ":" и "password". Ваш запрос должен выглядеть следующим образом:

query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID and v.password= :password"

(Я только что переместил "до конца" и удалил второй "where" и пробел после ":" )

Ответ 3

Общие шаги (именованный запрос или иначе)

  • Создайте запрос - у него есть пять методов создания.
  • Задайте запрос с параметрами, если это необходимо - интерфейс запроса имеет эти методы.
  • Выполнить запрос - интерфейс запроса имеет три метода, связанных с выполнением.

с помощью трех шагов вы можете выполнить любой запрос JPA.

Ответ 4

На самом деле брант прав, ваш NameQuery должен быть чем-то вроде этого,

@NamedQuery(name = "Voter.findvoter", query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID AND where v.password = :password")
@Entity
public class Voter implements Serializable{ ... }

и где-нибудь еще вы должны попробовать этот (который сказал Дик)

public class VoterFasade{
    public List<Voter> findVoter(long id,String password){
        List<Voter> results = em.createNamedQuery("Voter.findvoter")
            .setParameter("voterID", id)
            .setParameter("password",password)
            .getResultList();
        return result;
    }
}

то вы можете использовать его как

@Inject
VoterFasade voterFasade;

///
long id=12;
voterFasade.findVoter(id);

должен работать (его несвязанный код).

вы также можете сделать это с помощью репозитория, проверьте приведенную ниже ссылку, репозиторий репозитория Listing23.Example введите ссылку здесь