jpql和hibernate的年龄差异

Jpql and hibernate age difference

我想编写一种方法,以 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 个参数 - lower 和 upper - 否则你只能查询 +/- 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();
        }
}

存储年龄可能也不是一个好主意,因为它不是一个固定值(不像出生日期)。

查询将是:

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

并设置 de 参数:

query.setParameter("startAge", age - 5);
query.setParameter("endAge", age + 5);