Jpql и Hibernate разница в возрасте - PullRequest
0 голосов
/ 18 февраля 2020

Я хочу написать метод, который ищет людей в данном возрасте с интервалом в 5 лет. То есть, если возраст установлен на 30 лет, то метод должен охватывать всех людей от 25 до 35 лет.

  @Entity
@NamedQueries({
        @NamedQuery(name = "Person.findByNameUndSurname", query = "SELECT c FROM Person c WHERE c.name = ?1 and c.surname = ?1"),
        @NamedQuery(name = "Person.findByAge", query = "SELECT c FROM Person c WHERE c.age = ?1")
})
    Person{
    name,age und get,set
    }

public class PersonMenager extends AbstractRepository {

---
    public List findPersonByAge(int age){
            return entityManager.createQuery("SELECT c from Person c WHERE c.age = ?1 and c.age between age-5 and  age+5").getResultList();
        }
}

Я не понимаю, как я могу использовать данные о возрасте

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Запрос будет выглядеть следующим образом:

SELECT c from Person c WHERE c.age between :age -5 and  :age + 5 

Затем вам нужно позвонить query.setParameter("age", age).

. Для более гибкого запроса, если использовать:

SELECT c from Person c WHERE c.age between :startAge and  :endAge

И установить де параметры:

query.setParameter("startAge", age - 5);
query.setParameter("endAge", age + 5);
1 голос
/ 18 февраля 2020

Передайте 2 параметра - нижний и верхний - в противном случае вы ограничены только возможностью запрашивать в течение +/- 5 лет. Что, если вы хотите +/- 3?

public class PersonMenager extends AbstractRepository {

    public List findPersonByAge(int lowerBound, int upperBound){
            return entityManager.createQuery("SELECT c from Person c 
                WHERE c.age between ?1 and ?2).getResultList();
        }
}

Сохранение возраста, вероятно, также не очень хорошая идея, так как это не фиксированное значение (в отличие, скажем, от даты рождения).

...