Не найден объект для исключения запроса, даже если для этого запроса есть строка - PullRequest
0 голосов
/ 04 октября 2018

Я написал простую программу для входа в систему пользователя. Я могу получить все результаты из таблицы, и она работает правильно, но когда я хочу проверить, существует ли пользователь с именем и паролем, всегда выдается не найденная сущность для исключения запроса, и я знаю, что тамстрока в таблице с этим именем и паролем.это мой код:

public List<Person> getList(){
    return entityManager.createQuery("select entity from person entity").getResultList();
}
public Person logIn(String name,String password){
      String selectQuery = "select entity from person entity where name=:name and password=:password";
      Person person = (Person)entityManager.createQuery(selectQuery)
              .setParameter("name",name)
              .setParameter("password",password)
              .getSingleResult();

      System.out.println(person);
      return person;
}

это мой класс сущностей для Персона

@Entity(name = "person")
    @Table(name = "PERSON")
public class Person {
    @Id
    @Column(name = "ID",columnDefinition = "NUMBER")
    @SequenceGenerator(name = "PERSON_SEQ",sequenceName = "PERSON_SEQ",allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.AUTO,generator = "PERSON_SEQ")
    private Long id;
    @Column(name = "NAME",columnDefinition = "NVARCHAR2(30)")
    @NotNull(errorCode = "Null",message = "Name can't be null")
    @NotEmpty(errorCode = "Empty",message = "Name can't be empty")

    private String name;

    @Column(name = "FAMILY",columnDefinition = "NVARCHAR2(30)")
    @NotNull(errorCode = "Null",message = "Family can't be null")
    @NotEmpty(errorCode = "Empty",message = "Family can't be empty")
    private String family;

    @Column(name = "Password",columnDefinition = "VARCHAR2(256)")
    @NotNull(errorCode = "Null",message = "Family can't be null")
    @NotEmpty(errorCode = "Empty",message = "Family can't be empty")
    private String password; /*setter and getter methods....*/

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Метод getSingleResult() может выдать NonUniqueResultException, если имеется несколько строк.Поэтому, если у вас нет уникальных ограничений в вашей таблице, это может произойти в будущем.

Также убедитесь, что вы используете блок try/catch, чтобы узнать, есть ли у вас результат:

      String selectQuery = "select entity from person entity where name=:name and password=:password";
      Person person = null;

      try{
       person = (Person)entityManager.createQuery(selectQuery)
              .setParameter("name",name)
              .setParameter("password",password)
              .getSingleResult();
      }
      catch(NoResultException e){
        //TO-DO do something if query retrieves nothing
      }       

      System.out.println(person);
      return person;

Если нет, вы всегда можете использовать вышеуказанный метод getResultList() и просто вызвать get(0) для первого результата.

Если вы действительно думаете, что запрос возвращает строку, проверьте оператор SQL снова.

РЕДАКТИРОВАТЬ:

Вы можете попробовать его с собственным запросом

    String selectQuery = "SELECT * FROM PERSON where name = ?1 and password = ?2";

    Query q = em.createNativeQuery(selectQuery);
    q.setParameter(1, name);
    q.setParameter(2, password);

    person = (Person) q.getSingleResult();
0 голосов
/ 04 октября 2018

Я считаю, что Человек должен быть верблюдом следующим образом:

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