Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Criteria API已被弃用,但JPA Criteria API比较复杂,几乎不可用(例如,用于连接)_Hibernate_Jpa_Hibernate Criteria_Criteria Api - Fatal编程技术网

Hibernate Criteria API已被弃用,但JPA Criteria API比较复杂,几乎不可用(例如,用于连接)

Hibernate Criteria API已被弃用,但JPA Criteria API比较复杂,几乎不可用(例如,用于连接),hibernate,jpa,hibernate-criteria,criteria-api,Hibernate,Jpa,Hibernate Criteria,Criteria Api,据我所知,Hibernate Criteria API已被弃用: 但在Hibernate CriteriaAPI中,使用连接构建复杂查询很容易。我可以这样做: Criteria criteriaQuery = session.createCriteria(Request.class); // 1. Prepare aliases (JOINs) from main table if (!StringUtils.isBlank(searchCriteria.getRequestorName())

据我所知,Hibernate Criteria API已被弃用:

但在Hibernate CriteriaAPI中,使用
连接构建复杂查询很容易。我可以这样做:

Criteria criteriaQuery = session.createCriteria(Request.class);
// 1. Prepare aliases (JOINs) from main table
if (!StringUtils.isBlank(searchCriteria.getRequestorName())) {
    criteriaQuery.createAlias("requestor", "npRequestor", JoinType.INNER_JOIN);
}
if (!StringUtils.isBlank(searchCriteria.getApproverName())) {
    criteriaQuery.createAlias("workflows", "wf", JoinType.INNER_JOIN);
    criteriaQuery.createAlias("wf.approver", "npApprover", JoinType.INNER_JOIN);
}
// Prepare criteria
// ...
criteriaQuery.add(Restrictions.eq("wf.someAttribute", someAttr));
}       
但是在JPA标准API中执行
连接
和复杂查询是极其困难的。作为一名用户,“我很难使用CriteriaAPI创建复杂的连接,而且找不到大量的文档和示例。”

简单连接需要创建一个
元模型
(一个单独的过程),然后创建一个
EntityType
,语法很难构造。下面是可能的最简单示例,但我有多个If/Else条件和多路连接

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Metamodel m = em.getMetamodel();
EntityType<Pet> Pet_ = m.entity(Pet.class);
EntityType<Owner> Owner_ = m.entity(Owner.class);

Root<Pet> pet = cq.from(Pet.class);
Join<Owner, Address> address = cq.join(Pet_.owners).join(Owner_.addresses);
CriteriaQuery cq=cb.createQuery(Pet.class);
元模型m=em.getMetamodel();
EntityType Pet=m.entity(Pet.class);
EntityType所有者=m.entity(Owner.class);
根pet=cq.from(pet.class);
加入地址=cq.Join(宠物主人)。Join(主人地址);
为什么人们要朝自己的脚开枪?为什么不赞成完全可用的东西,而支持一个笨重且难以使用的替代品