标签: hibernate-criteria

JPA和Hibernate - Criteria与JPQL或HQL

使用CriteriaHQL有哪些优缺点?Criteria API是一种很好的面向对象的方式来表达Hibernate中的查询,但有时Criteria Queries比HQL更难理解/构建.

什么时候使用Criteria和何时使用HQL?您更喜欢哪种用例?或者只是品味问题?

java hibernate hql criteria hibernate-criteria

292
推荐指数
16
解决办法
14万
查看次数

Hibernate Criteria vs HQL:哪个更快?

我一直在读一些水壶,但我仍然感到困惑.为什么?因为你提到的差异与绩效无关.它们与易用性有关.(Objetc(标准)和SQL(hql)).但我想知道"条件"是否因某种原因比hql慢.

我在另一个回答中读到了这个

"HQL和criteriaQuery之间的性能存在差异,每次使用criteriaQuery触发查询时,它都会为表名创建一个新别名,这不会反映在任何数据库的最后一个查询缓存中.这会导致开销编译生成的SQL,花费更多时间来执行." 作者:Varun Mehta.

这非常接近但是!我在另一个网站上阅读(http://gary-rowe.com/agilestack/tag/hibernate/)Hibernate 3.3及以上版本不再是这种情况(请阅读:9)Hibernate很慢,因为SQL生成的Criteria接口不一致)

我已经做了一些测试试图找出差异,但两者都生成qry并且它不会更改表的别名.

我很困惑.如果有人知道主要原因,请帮助我们.谢谢

performance hibernate hql hibernate-criteria

67
推荐指数
4
解决办法
5万
查看次数

Hibernate Criteria限制和/或组合

我如何使用Hibernate Restrictions实现这一目标?

(((A='X') and (B in('X',Y))) or ((A='Y') and (B='Z')))
Run Code Online (Sandbox Code Playgroud)

hibernate criteria restrictions hibernate-criteria

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

JPA2:不区分大小写,就像匹配任何地方一样

我一直在JPA 1.0(Hibernate驱动程序)中使用Hibernate Restrictions.定义了Restrictions.ilike("column","keyword", MatchMode.ANYWHERE)哪些测试关键字是否匹配列的任何位置,并且它不区分大小写.

现在,我使用JPA 2.0和EclipseLink作为驱动程序,因此我必须使用"Restrictions"内置JPA 2.0.我发现CriteriaBuilder和方法like,我也发现了如何使它匹配任何地方(尽管它是令人讨厌和手动),但我仍然没有想出如何做它不区分大小写.

我目前有一个很好的解决方案:

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<User> query = builder.createQuery(User.class);
EntityType<User> type = em.getMetamodel().entity(User.class);
Root<User> root = query.from(User.class);

// Where   
// important passage of code for question  
query.where(builder.or(builder.like(root.get(type.getDeclaredSingularAttribute("username", String.class)), "%" + keyword + "%"),
        builder.like(root.get(type.getDeclaredSingularAttribute("firstname", String.class)), "%" + keyword + "%"),
        builder.like(root.get(type.getDeclaredSingularAttribute("lastname", String.class)), "%" + keyword + "%")
        ));

// Order By
query.orderBy(builder.asc(root.get("lastname")),
            builder.asc(root.get("firstname")));

// Execute
return em.createQuery(query).
            setMaxResults(PAGE_SIZE + 1).
            setFirstResult((page - 1) * PAGE_SIZE).
            getResultList();
Run Code Online (Sandbox Code Playgroud)

问题: …

java criteria eclipselink hibernate-criteria jpa-2.0

47
推荐指数
4
解决办法
6万
查看次数

Hibernate Criteria查询以获取特定列

我在我的代码中使用Criteria Query.它总是火上浇油select * from ...

相反,我想从我的查询中忽略一个列(字段),因为该字段有大量以字节存储的数据.而这导致了性能问题.

任何人都可以为此提出想法吗?


一些更新

我在查询中添加了一个投影,它创建了一个像...的查询

select
    this_.TEMPLATE_ID as y0_,
    this_.TEMPLATE_NAME as y1_,
    this_.CREATE_DATE as y2_,
    this_.UPDATE_DATE as y3_,
    this_.STATUS_CODE as y4_,
    this_.USER_ID as y5_,
    this_.UPDATED_BY as y6_,
    this_.CATEGORY_ID as y7_,
    this_.PRACTICE_ID as y8_ 
from
    templates this_ 
inner join
    user user1_ 
        on this_.USER_ID=user1_.USER_ID 
inner join
    template_categories category2_ 
        on this_.CATEGORY_ID=category2_.CATEGORY_ID 
where
    y4_=? 
    and y8_=? 
    and y5_ in (
        ?, ?
    ) 
order by
    y1_ asc limit ?
Run Code Online (Sandbox Code Playgroud)

现在问题就像.. Unknown column 'y4_' in 'where clause' 和y8_相同的错误,y5_意味着所有关闭它给出错误的地方.

我修改它像查询...

select …
Run Code Online (Sandbox Code Playgroud)

java mysql hibernate hibernate-criteria

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

何时使用Hibernate投影?

我对Hibernate的预测标准有点困惑.何时使用预测以及何时使用标准?

请帮我.谢谢!

hibernate hibernate-criteria nhibernate-projections

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

Criteria.DISTINCT_ROOT_ENTITY与Projections.distinct

我对Hibernate很新.我发现我们可以使用以下两种不同的方式获得不同的结果.谁能告诉我他们之间有什么区别?何时使用其他?

Projections.distinct(Projections.property("id"));
Run Code Online (Sandbox Code Playgroud)

VS

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Run Code Online (Sandbox Code Playgroud)

nhibernate hibernate distinct hibernate-criteria

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

Hibernate Group by Criteria Object

我想用Hibernate Criteria实现以下SQL查询:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name <operator> value
GROUP BY column_name
Run Code Online (Sandbox Code Playgroud)

我试图用Hibernate Criteria来实现它,但它没有成功.

谁能给我一个例子,说明如何使用Hibernate Criteria?谢谢!

java sql hibernate hibernate-criteria

38
推荐指数
3
解决办法
10万
查看次数

如何使用Hibernate选择列?

我想使用Hibernate选择单个列而不是整个对象.到目前为止我有这个:

 List<String> firstname = null;

 firstname = getSession().createCriteria(People.class).list();
Run Code Online (Sandbox Code Playgroud)

我的问题是上面的代码将整个People表作为对象返回,而不仅仅是"firstname".我不知道如何指定只返回"firstname"而不是整个对象.

java mysql hibernate hibernate-criteria

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

org.hibernate.QueryException:无法解析property:filename

我正在使用Hibernate Criteriafilename我的表中的列获取值contaque_recording_log.

但是当我得到结果时,它会引发异常

org.hibernate.QueryException:无法解析属性:filename of:com.contaque.hibernateTableMappings.contaque_recording_log

我的表bean是:

import java.util.Date;
import javax.persistence.*;


@Entity
@Table(name="contaque_recording_log")
public class contaque_recording_log implements java.io.Serializable{
    private static final long serialVersionUID = 1111222233334404L;
    @Id
    @Column(name="logId", insertable=true, updatable=true, unique=false)
    private Integer logId;

    @Column(name="userName", insertable=true, updatable=true, unique=false)
    private String userName;

    @Column(name="ext", insertable=true, updatable=true, unique=false)
    private String ext;

    @Column(name="phoneNumber", insertable=true, updatable=true, unique=false)
    private String phoneNumber;

    @Column(name="callerId", insertable=true, updatable=true, unique=false)
    private String callerId;

    @Column(name="fileName", insertable=true, updatable=true, unique=false)
    private String fileName;


    @Column(name="campName", insertable=true, updatable=true, unique=false)
    private String campName;

    @Temporal(javax.persistence.TemporalType.TIMESTAMP) …
Run Code Online (Sandbox Code Playgroud)

java hibernate hibernateexception hibernate-criteria oracle-sqldeveloper

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