当前位置: 首页 > 面试题库 >

如何使用JPA Criteria查询编写此查询?

洪星文
2023-03-14
问题内容

谁能帮助我获取下面提到的JPA查询的JPA标准查询。

SELECT p,l FROM Person p 
LEFT JOIN Language l ON (p.language = l.language and l.locale like :locale) 
AND p.name like :name 
AND p.time BETWEEN :startDate 
AND :endDate order by name asc

问题答案:

假设Person与语言有关,这就是您在较早的Hibernate中所做的事情:

Criteria criteria = entityManager.createCriteria(Person.class);
Criteria languageCriteria = criteria.createCriteria("language");

languageCriteria.add(Restrictions.like("locale", locale));

criteria.add(Restrictions.like("name", name));
criteria.add(Restrictions.between("time", startDate, endDate));

criteria.addOrder(Order.asc("name"));

我第一次尝试使用JPA 2.0:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Person> criteria = builder.createCriteria(Person.class);
Root<Person> pRoot = criteria.from(Person.class);
Join<Person, Language> langJoin = criteria.join("language", JoinType.LEFT);

Predicate conjunction = builder.conjunction();

criteria.where(builder.and(
    builder.like(langJoin.get(Language_.locale), locale),
    builder.like(pRoot.get(Person_.name), name),
    builder.between(pRoot.get(Person_.time), startDate, endDate));

criteria.orderBy(builder.asc(pRoot.get(Person_.name)));

请让我知道这是否适合您。

编辑: 更新查询以仅使用一个where呼叫。



 类似资料:
  • 问题内容: 我有此查询,它运行良好 从此查询中,我从我的位置(这是我的第一张表)中选择所有3 KM的餐厅。 但是我需要从3Km中的食品接头中选择AVG等级。 该查询也运行完美: 但是我需要添加这两个查询,通过它们我可以选择所有那些食品接头及其等级AVG。 问题答案: 只需放置子查询,您将得到结果:

  • 问题内容: 我有一个用于Elasticsearch的简单JSON查询,如下所示: 仅当值(在这种情况下为“ a1”)不为空时,才如何执行第二个“必须”条件? 问题答案: 您可以使用以下方法实现它-

  • 问题内容: 问题答案: 这是从MySQL数据库知识库中获得的: LIMIT子句可用于约束SELECT语句返回的行数。 LIMIT接受一个或两个数字参数,这两个参数都必须是非负整数常量(使用预处理语句时除外)。 为了使查询正常工作,您需要将其编写为 准备好的语句 ,然后执行该 语句 。

  • 问题内容: 可以请一些人提供如何使用联接编写以下sql查询的方法。我不希望尽量不要使用 in ,我也想替换 where 条件。 我正在使用SQL Server 2008 问题答案: 本文: NOT IN与NOT EXISTS与LEFT JOIN / IS NULL:SQL Server 如果您感兴趣的话。 简而言之,此查询: 可以工作,但是效率不如(或)构造。 您还可以使用以下命令: 这既不使用也

  • 问题内容: 我有以下sql查询,如何使用yii编写查询? 我没有使用,暂时正在避免使用它。 使用三个表,用户,类别和job_profile。 我已经编写了以下查询,但是我不知道如何包括join: 问题答案: $model = JobProfile::model()->with(‘userrelationname’,’categoryrelationname’)->findAll(array(“co