标签: criteria-api

Criteria API中是否存在类似Restrictions.eq(true,false)的内容?

我需要一个通用的Criterion强制结果零匹配.

有点像Restrictions.eq(true, false)

java hibernate criteria criteria-api

13
推荐指数
2
解决办法
3659
查看次数

Netbeans中的JPA 2.0元模型?

我已经读过,自版本6.9以来,Netbeans包含注释处理支持,例如,需要一个功能来生成JPA 2.0实体的元模型.

但是,我找不到任何能够准确显示如何操作的示例或文档.你们有没有成功的人?

java netbeans criteria-api annotation-processing jpa-2.0

12
推荐指数
1
解决办法
5796
查看次数

如何在JPA critera API中做一个独特的计数?

我想这样做但是使用标准API代替:

select count(distinct e) from Event e, IN(e.userAccessPermissions) p where p.principal = :principal and p.permission in (:permissions)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java hibernate jpa criteria-api

12
推荐指数
1
解决办法
2万
查看次数

JPA Criteria API:LEFT JOIN用于可选关系

我第一次使用Criteria API.它是关于抽象通用构建器的查询:

public TypedQuery<T> newQuery( Manager<?,T> manager )
{
    CriteriaBuilder builder = this.entityManager.getCriteriaBuilder();

    Class<T> genericClass = ( Class<T> ) ( ( ParameterizedType ) manager.getClass().getGenericSuperclass() ).getActualTypeArguments()[1];

    CriteriaQuery<T> criteriaQuery = builder.createQuery( genericClass );
    Root<T> root = criteriaQuery.from( genericClass );

    ...
}
Run Code Online (Sandbox Code Playgroud)

该调用默认为实体上找到的所有关系criteriaQuery.from( genericClass );生成SQL INNER JOIN.这是一个问题,因为每个关系都为空(DB NULL或不使用外键且具有无效引用的DB)这些实体将在结果列表中丢失,从而有效地产生错误的搜索结果.

可以在此处找到一个示例:JPA Criteria query Path.get left join is it possibile

对于由此类/方法实例化的查询,我想要发生的是实体上的所有关系,这里genericClass映射为optional = true

@ManyToOne( FetchType.EAGER, optional = true )
@JoinColumn( name = "CLOSE_USER_ID", referencedColumnName = "USER_ID" )
private …
Run Code Online (Sandbox Code Playgroud)

java sql jpa criteria-api metamodel

12
推荐指数
1
解决办法
3万
查看次数

JPA 2.0:计算任意CriteriaQuery?

我正在尝试实现以下便捷方法:

/**
 * Counts the number of results of a search.
 * @param criteria The criteria for the query.
 * @return The number of results of the query.
 */
public int findCountByCriteria(CriteriaQuery<?> criteria);
Run Code Online (Sandbox Code Playgroud)

在Hibernate中,这是通过

criteria.setProjection(Projections.rowCount());
Run Code Online (Sandbox Code Playgroud)

JPA中的上述内容是什么?我找到了许多简单的计数示例,但没有一个使用了应该确定行数的CriteriaQuery.

编辑:

不幸的是我发现@Pascal的答案不正确.问题非常微妙,只有在使用连接时才显示:

// Same query, but readable:
// SELECT *
// FROM Brain b
// WHERE b.iq = 170

CriteriaQuery<Person> query = cb.createQuery(Person.class);
Root<Person> root = query.from(Person.class);
Join<Object, Object> brainJoin = root.join("brain");
Predicate iqPredicate = cb.equal(brainJoin.<Integer>get("iq"), 170);
query.select(root).where(iqPredicate);
Run Code Online (Sandbox Code Playgroud)

在调用时findCountByCriteria(query),它会因以下异常而死亡:

org.hibernate.hql.ast.QuerySyntaxException: Invalid path: …
Run Code Online (Sandbox Code Playgroud)

orm jpa count criteria-api jpa-2.0

11
推荐指数
2
解决办法
1万
查看次数

如何在一个查询中获取所有数据

我有多个通过JPA2 Criteria Query查询的实体.

我可以加入其中两个实体并立即获得结果:

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<LadungRgvorschlag> criteriaQuery = criteriaBuilder.createQuery(LadungRgvorschlag.class);
Root<LadungRgvorschlag> from = criteriaQuery.from(LadungRgvorschlag.class);
Join<Object, Object> ladung = from.join("ladung");

from.fetch("ladung", JoinType.INNER);
Run Code Online (Sandbox Code Playgroud)

然后我尝试加入另外一个表:

ladung.join("ladBerechnet");
ladung.fetch("ladBerechnet", JoinType.LEFT);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=generatedAlias3,role=null,tableName=ladberechnet,tableAlias=ladberechn3_,origin=ladungen ladung1_,columns={ladung1_.id ,className=de.schuechen.beans.tms.master.LadBerechnet}}] [select generatedAlias0 from de.schuechen.beans.tms.master.LadungRgvorschlag as generatedAlias0 inner join generatedAlias0.ladung as generatedAlias1 inner join generatedAlias1.ladBerechnet as generatedAlias2 left join fetch generatedAlias1.ladBerechnet as generatedAlias3 inner join …
Run Code Online (Sandbox Code Playgroud)

java mysql hibernate criteria-api jpa-2.0

11
推荐指数
2
解决办法
2万
查看次数

需要帮助创建JPA条件查询

我正在使用Glassfish和JSF构建我的第一个Java EE Web应用程序.我对条件查询相当新,我有一个我需要执行的查询,但javaee6教程在示例上似乎有点薄.无论如何,我很难创建查询.

目标:我希望用最多的文档来存储公司.公司与文档具有OneToMany关系.Documents与多个表具有ManyToOne关系,"usertype"列区分它们.

MySQL查询:

SELECT USERID, COUNT(USERID) AS CNT 
FROM DOCUMENTS 
WHERE USERTYPE="COMPANY" 
GROUP BY USERID 
ORDER BY CNT DESC
Run Code Online (Sandbox Code Playgroud)

谢谢

--update--根据用户反馈,这是我到目前为止:

        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Documents> cqry = cb.createQuery(Documents.class);
        //Intersting Stuff
        Root<Documents> root = cqry.from(Documents.class);
        Expression userid = root.get("userID");
        Expression usertype = root.get("userType");
        Expression count = cb.count(userid);
        cqry.multiselect(userid, count);
        Predicate userType = cb.equal(usertype, "COMPANY");
        cqry.where(userType);
        cqry.groupBy(userid);
        cqry.orderBy(cb.desc(count));
        //more boilerplate
        Query qry = em.createQuery(cqry);
        List<Documents> results = qry.getResultList();
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Exception Description: Partial object queries are not allowed to maintain …
Run Code Online (Sandbox Code Playgroud)

java jpa criteria-api

11
推荐指数
1
解决办法
2万
查看次数

如何在连接多个表时使用JPA Criteria API

这是对此的进一步问题:

如何在JOIN中使用JPA Criteria API

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();

CriteriaQuery<Company> criteria = criteriaBuilder.createQuery( Company.class );
Root<Company> companyRoot = criteria.from( Company.class );
Join<Company,Product> products = companyRoot.join("dentist");
Join<Company, City> cityJoin = companyRoot.join("address.city");//Company->Address->City-city
criteria.where(criteriaBuilder.equal(products.get("category"), "dentist"),      criteriaBuilder.equal(cityJoin.get("city"),"Leeds"));
Run Code Online (Sandbox Code Playgroud)

公司有地址,地址内有City-pojo和Country-Pojo.我该如何使用它JOIN?我尝试引用它,address.city但我收到了错误消息:

来自托管类型[EntityTypeImpl @ 1692700229:Company [javaType:class com.test.domain.Company descriptor:RelationalDescriptor(com.test.domain.Company - > [DatabaseTable(COMPANY)])的属性[address.city],映射:16]]不存在.

java jpa join criteria-api

11
推荐指数
1
解决办法
5万
查看次数

在jpa标准api中使用NOT EXISTS构建查询

我有两个名为table1,table2的表.这两个表都有相同的字段.这两个表之间没有关系.我的要求是我想要table1中的所有记录,而不是table2中的记录.所以我使用Criteria API编写了一个查询.但它没有给出正确的结果.由于我是这个JPA和标准API的新手,任何人都可以指出我在做错的地方.以下代码我用来做这个.

CriteriaBuilder cb = mediationEntityManager.getCriteriaBuilder();
CriteriaQuery<Table1>  cq = cb.createQuery(Table1.class);
Root<Table1> table1 = cq.from(Table1.class);
cq.select(table1)

Subquery<Table2> subquery =  cq.subquery(Table2.class)
Root table2 = subquery.from(Table2.class)
subquery.select(table2)
cq.where(cb.not(cb.exists(subquery)))
TypedQuery<Table1> typedQuery = mediationEntityManager.createQuery(cq); 
List<Table1> resultList = typedQuery.getResultList();
Run Code Online (Sandbox Code Playgroud)

MySQL查询:

SELECT table1 
FROM   table1 table1 
WHERE  NOT EXISTS (SELECT table2 
                   FROM   table2 table2 
                   WHERE  table2.name = table1.name 
                          AND table2.education = table1.education 
                          AND table2.age = table1.age) 
       AND table1.name = 'san' 
       AND table1.age = '10'; 
Run Code Online (Sandbox Code Playgroud)

我需要针对上述MySQL查询的JPA条件API查询.

jpa criteria-api jpa-2.0

11
推荐指数
1
解决办法
2万
查看次数

截断/删除给定的实体类

我通过一种方法获得了我的实体类.我试图找出,如何通过JPA JPQL或Criteria API我可以发出截断或删除.我认为标准api对于使用类更自然,而truncate是一个更快的操作,所以这些是首选.这是我到目前为止所做的,但不确定要添加/更改的内容.

    CriteriaBuilder cb = this._em().getCriteriaBuilder();
    cb.createQuery( _entityClass() ).from( _entityClass() );
Run Code Online (Sandbox Code Playgroud)

注意:_entityClass返回MyEntity.class,我没有其他引用MyEntity这是一个更通用的实现.

java jpa criteria criteria-api

11
推荐指数
1
解决办法
1万
查看次数