标签: hibernate-criteria

如何使用hibernate条件实现使用内部联接对象选择查询

我是Hibernate和Criteria Query的新手.所以我在HQL中实现了查询:

select A.mobilephone
    B.userNick
    C.creditCard
from mobile_table A
inner join user_table B
    on A.codmobile=B.codmobile
inner join Credit C 
    on A.mobileCredit= C.mobileCredit
Run Code Online (Sandbox Code Playgroud)

如何使用Hibernate Criteria Object实现它?

java hibernate hibernate-criteria

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

使用Criteria运行子查询时ClassCastException(String to Long)

首先是我的设置:

  1. mysql-connector-java 5.1.24
  2. hibernate-core 4.1.10.Final

运行此条件查询时,我遇到了ClassCastException:

Criteria sellableItemsCriteria = session.createCriteria(MarketData.class, "md");
sellableItemsCriteria.add(Restrictions.in("region", regions));
sellableItemsCriteria.add(Restrictions.in("itemTypeId", items));
DetachedCriteria sellOrderSizeCriteria = DetachedCriteria.forClass(MarketOrder.class);
sellOrderSizeCriteria.add(Restrictions.eq("marketDataId", "md.id"));
sellOrderSizeCriteria.add(Restrictions.eq("bid", false));
sellOrderSizeCriteria.setProjection(Projections.count("marketDataId"));
sellableItemsCriteria.add(Subqueries.lt(0L, sellOrderSizeCriteria));
Run Code Online (Sandbox Code Playgroud)

例外:

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
Run Code Online (Sandbox Code Playgroud)

问题来自这一行(首先我尝试使用0而不是0L而且我得到的Integer不能转换为Long以便为什么我切换到Long):

sellableItemsCriteria.add(Subqueries.lt(0L, sellOrderSizeCriteria));
Run Code Online (Sandbox Code Playgroud)

这是我想运行的mysql查询:

SELECT md.* FROM `marketdata` md
WHERE md.region IN (:regions) 
AND md.item_typeID IN (:items) 
AND (SELECT COUNT(marketData_id) FROM `marketorder` WHERE marketData_id = md.id AND bid = 0) > 0
Run Code Online (Sandbox Code Playgroud)

我该如何解决演员问题?

或者也许有更好的方法来使用Criteria?

谢谢

java mysql hibernate classcastexception hibernate-criteria

4
推荐指数
1
解决办法
3374
查看次数

使用 Hibernate 的 Criteria API,我可以使用带有 ilike 限制的 concat 吗?

直觉上,我想做的是这样的:

Restrictions.ilike("concat(user.firstName, ' ', user.lastName)",
    text.toLowerCase() + "%")
Run Code Online (Sandbox Code Playgroud)

但是,我知道这行不通,因为concat(user.firstName, ' ', user.lastName)这不是 Hibernate 理解的属性,即使这是我在常规 SQL 语句中作为 where 子句的一部分键入的内容。

有没有什么简单的方法可以使用 Hibernate Criteria API 来限制,或者我是否必须依靠旧的 HSQL?

谢谢

java sql hibernate concat hibernate-criteria

4
推荐指数
1
解决办法
4871
查看次数

Hibernate Criteria 查询 - 同时按两列排序

我最近遇到尝试通过两列同等重要的列来排序 Hibernate Criteria 查询。基本上我的意思是,如果我有一个表,其中一列是日期(createdOnDate),另一列是日期(modifiedOnDate),我\xe2\x80\x99d喜欢比较Organization对象的orderBy子句中的所有日期。

\n\n

为此我尝试这样:

\n\n
session.createCriteria(Organization.class).addOrder(Order.desc("modified_date")).addOrder( Order.desc("created_date") ).list();\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它首先根据modified_date 对所有组织进行排序,然后再次使用created_date 进行排序。这意味着修改的记录可能出现在任何createdOn记录之前,即使createdOnDate更早。

\n\n

我需要与创建日期和修改日期同时进行排序。

\n\n

请为此提供帮助。

\n\n

提前致谢。

\n

hibernate hibernate-criteria

4
推荐指数
1
解决办法
6249
查看次数

当条件引用嵌入属性时,无法解析属性

我似乎无法使用引用嵌入式类中的属性的标准创建查询.当我使用"entity.embedded.property"时,它失败了.如果我为自己创建一个"entity.embedded.property"的别名,查询将起作用...任何tipes将不胜感激...

java orm hibernate hibernate-criteria

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

Hibernate Criteria:为Restrictions.isEmpty添加额外的限制

我创建了一个Hibernate(3.5)Criteria查询:

Criteria criteria = db.getSession().createCriteria(Vendor.class);
criteria.add(Restrictions.isEmpty("models"));
Run Code Online (Sandbox Code Playgroud)

当使用Criteria.list执行时,Hibernate会生成以下SQL(为了便于阅读而简化):

SELECT this_.*
FROM   VENDOR this_
       left outer join MODEL models1_
         ON this_.id = models1_.VENDOR_ID
WHERE  NOT EXISTS (SELECT 1
                   FROM   MODEL
                   WHERE  this_.id = VENDOR_ID)
Run Code Online (Sandbox Code Playgroud)

我想要做的是在"不存在"部分中添加一个限制,以便SQL查询看起来像这样

SELECT this_.* FROM VENDOR this_
left outer join MODEL models1_
         ON this_.id = models1_.VENDOR_ID
WHERE
NOT EXISTS (SELECT 1
                             FROM   MODEL
                             WHERE  this_.id = VENDOR_ID AND DEPRECATED = 0 )
Run Code Online (Sandbox Code Playgroud)

是否可以使用Hibernate Criteria API,如果可以,怎么做?或者是否有其他可能实现相同的结果(但仍然使用Criteria API)?

java hibernate hibernate-criteria

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

属性不在的Hibernate标准(子查询)

我想执行类似的查询

Select id, name from information where name not in (select firstname from contact where id  = 1)

Information
Id Name
1  Test

Contact
id firstname
1  name
2  Test
Run Code Online (Sandbox Code Playgroud)

如果我使用neProperty()函数,它将返回记录为 name != Test.

如何使用hibernate标准实现?

谢谢

hibernate subquery hibernate-criteria

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

Hibernate Criteria使用IN子句和子选择查询多个列

我有一个与这个问题非常相似的问题.

我从table1中选择了table2中field3和field4的所有匹配唯一组合的所有数据.

这是我剥离的SQL:

select *
from table1 as t1
where (t1.field1, t1.field2) in (select distinct field3, field4
                                 from table2 as t2
                                 where t2.id=12345);
Run Code Online (Sandbox Code Playgroud)

我需要将我的SQL翻译成Hibernate Criteria.我让我的实体对象正确映射到表并将响应转换为正确的结果实体,但我无法正确翻译我的where子句.

是)我有的

Criteria criteria = getSession().createCriteria(Table1.class);

DetachedCriteria subquery = DetachedCriteria.forClass(Table2.class);
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("field3"), "field3");
projectionList.add(Projections.property("field4"), "field4");
subquery.setProjection(Projections.distinct(projectionList));
subquery.add(Restrictions.eq("id", 12345));
Run Code Online (Sandbox Code Playgroud)

我希望我的where子句类似于:

criteria.add(Subqueries.in("field1, field2", subquery));
Run Code Online (Sandbox Code Playgroud)

但是Hibernate不允许这样做.

我已经尝试推出where子句以获得两个子查询,并根据结果检查field1和field2,但看起来子查询总是必须返回多个列.我使用group by做了这个,但是Hibernate会自动将组中的列添加到投影列表中,我找不到删除它们的方法.

以下是使用group by的相同查询:

select *
from table1 as t1
where t1.field1 in (select field3
                    from table2 as t2
                    where t2.id=12345
                    group by field3, field4)
  and …
Run Code Online (Sandbox Code Playgroud)

java sql hibernate hibernate-criteria

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

Hibernate标准按一对多关联计数排序

我有一个实体"X"与"Y"的一对多关联

每个X都有一个唯一的xid,每个Y都有一个xid和一个唯一的yid

我想写一个标准,生成一个按照相关Y的数量排序的X列表

这是等效的SQL

SELECT * 
FROM X JOIN Y ON X.xid = Y.xid
GROUP BY X.xid
ORDER BY COUNT(Y.yid) DESC
Run Code Online (Sandbox Code Playgroud)

我如何使用Hibernate Criteria表达这一点?

非常感谢彼得

java sql hibernate hibernate-criteria

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

如何向CriteriaBuilder.or添加Predicates列表

我有一个要附加的条件或条件

我面临的问题是当我迭代List并将其添加到CategoryBuilder然后它需要最后一个Predicate

以下是示例:

public static Specification<Billoflading> hasTenantAndBillingCodeCombination(List<WhoOwnsIt> list,
            Date formattedFromDate, Date formattedToDate, String carrierFilter, String supplierFilter,
            String terminalFilter) {
        return (root, query, cb) -> {
            List<Predicate> predicates = new ArrayList<>();

            for (WhoOwnsIt whoOwnsIt : list) {
                String containsLikePatternForTenant = getContainsLikePattern(whoOwnsIt.getWholesalerTenantID(), true);

                Predicate pred = cb.and(cb.like(cb.lower(root.<String>get("tenant")), containsLikePatternForTenant),
                        cb.equal(cb.lower(root.<String>get("billingCode")), whoOwnsIt.getBillingCode()),
                        cb.greaterThanOrEqualTo(root.<Date>get("scheduleDate"), formattedFromDate),
                        cb.lessThanOrEqualTo(root.<Date>get("scheduleDate"), formattedToDate));

                Predicate predWithTenant = null;

                if (null != carrierFilter) {
                    predWithTenant = cb.and(cb.equal(cb.lower(root.<String>get("tenant")), carrierFilter));
                }

                if (null != predWithTenant)
                    predicates.add(predWithTenant);
                else
                    predicates.add(pred);

            }
            Predicate finalPredicate;
            // This commented section …
Run Code Online (Sandbox Code Playgroud)

java jpa predicate hibernate-criteria spring-data-jpa

3
推荐指数
2
解决办法
3334
查看次数