标签: 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中获得明显的结果?

我正在尝试使用基于行的限制(例如:setFirstResult(5)setMaxResults(10))在已连接到其他表的Hibernate Criteria查询上实现分页.

可以理解的是,数据随机被切断; 这里解释了原因.

作为解决方案,页面建议使用"第二个sql选择"而不是连接.

如何将现有条件查询(使用连接createAlias())转换为使用嵌套选择?

java paging hibernate criteria distinct

69
推荐指数
5
解决办法
17万
查看次数

Hibernate条件:没有映射关联的连接表

我想使用Hibernate的标准api来制定一个连接两个实体的特定查询.假设我有两个实体,Pet和Owner,拥有许多宠物,但关键是这种关联没有映射到Java注释或xml中.

使用hql,我可以通过在查询中指定连接来选择拥有名为'fido'的宠物的所有者(而不是将一组宠物添加到所有者类).

可以使用休眠标准完成相同的操作吗?如果是这样的话?

谢谢,J

java hibernate hql criteria

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

如何从Hibernate Criteria API获取SQL(*not*用于记录)

是否有一种从Hibernate Criteria获取(待生成)sql的简单方法?

理想情况下,我会有类似的东西:

Criteria criteria = session.createCriteria(Operator.class);

... build up the criteria ...
... and then do something like ...

String sql = criteria.toSql()

(But this of course does not exist)
Run Code Online (Sandbox Code Playgroud)

这个想法是使用sql作为巨大的'MINUS'查询的一部分(我需要找到两个相同模式之间的差异 - 结构相同,而不是数据 - 而Hibernate不支持MINUS)

(顺便说一句,我知道我可以从日志文件中检查SQL)

java sql hibernate criteria

65
推荐指数
4
解决办法
9万
查看次数

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万
查看次数

Hibernate Criteria加入3个表

我正在寻找一个hibernate标准来获得以下内容:

Dokument.class映射到Role roleId

Role.class有一个ContactPerson contactId

Contact.class FirstName LastName

我想在Contact类中搜索First或LastName,并检索连接的Dokuments列表.

我尝试过这样的事情:

session.createCriteria(Dokument.class)
.setFetchMode("role",FetchMode.JOIN)
.setFetchMode("contact",FetchMode.JOIN)
.add(Restrictions.eq("LastName","Test")).list();
Run Code Online (Sandbox Code Playgroud)

我得到一个错误无法解决类"Dokument"的属性"LastName"

有人可以解释为什么连接搜索Dokument而不是所有连接表?在此先感谢您的帮助!

hibernate join criteria

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

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万
查看次数

如何正确表达JPQL"join fetch"和"where"子句为JPA 2 CriteriaQuery?

考虑以下JPQL查询:

SELECT foo FROM Foo foo
INNER JOIN FETCH foo.bar bar
WHERE bar.baz = :baz
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其转换为Critieria查询.这是我得到的:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Foo> cq = cb.createQuery(Foo.class);
Root<Foo> r = cq.from(Foo.class);
Fetch<Foo, Bar> fetch = r.fetch(Foo_.bar, JoinType.INNER);
Join<Foo, Bar> join = r.join(Foo_.bar, JoinType.INNER);
cq.where(cb.equal(join.get(Bar_.baz), value);
Run Code Online (Sandbox Code Playgroud)

这里显而易见的问题是我正在进行两次相同的连接,因为Fetch<Foo, Bar>似乎没有方法来获取Path.有没有办法避免必须加入两次?或者我是否必须坚持使用简单的查询这么好的旧JPQL?

java jpa criteria jpa-2.0

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

如何通过在Hibernate中使用限制和标准来实现"不在"?

我有类别列表.我需要排除2,3行的类别列表.我们可以通过使用Criteria和Restriction来实现休眠吗?

hibernate criteria restriction

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

Hibernate使用ID查询外键字段

例如,我有两个实体:Employee和Address.在这些enitities中,Employee有一个外键AddressID引用Address上的ID列.在Java域对象中,Hibernate使用Address对象字段很好地包装了forgein键整数字段.但是现在,我如何使用某个AddressID查询Employee?

我试图创建一个表别名.这似乎有效,但它相当尴尬.

我也尝试过这样的事情:

criteria.add(restriction.eq("TheAddressObjectFieldName", 123);
Run Code Online (Sandbox Code Playgroud)

它工作一段时间但并不总是.我不确定这是正确的方法,但我希望它能一直这样.

那么在hibernate中查询外键列的正确方法是什么?

hibernate criteria

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