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);
我想编写一种方法,以 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);