首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在将CriteriaQuery联接添加到CriteriaQuery后修改它们

在将CriteriaQuery联接添加到CriteriaQuery后修改它们
EN

Stack Overflow用户
提问于 2014-04-03 14:31:32
回答 1查看 472关注 0票数 1

目前,我有一个UserDao类,它使用CriteriaQuery创建一个查询,例如,使用它的ID从数据库中检索User实例(让我们调用该方法findById)。到目前为止,这是非常简单的,而且效果很好。

但是,我也有一个GenericDao,它是由UserDao扩展的。在userDao.findById返回其结果之前,它将criteriaQuery传递给GenericDao,以便我可以向criteriaQuery添加一些限制。

示例:

代码语言:javascript
复制
public class GenericDao
{
    private EntityManager entityManager;

    protected Object executeCriteriaQuery(CriteriaQuery criteriaQuery)
    {
        return entityManager.createQuery(prepareQuery(criteriaQuery)).getSingleResult();
    }

    private CriteriaQuery prepareQuery(CriteriaQuery criteriaQuery)
    {
        // add restrictions to criteriaQuery
        Predicate predicate = ... // some predicate which will be appended to the already formed criteriaQuery

        criteriaQuery.where(criteriaBuilder.and(criteriaQuery.getRestriction(), predicate));

        return criteriaQuery;
    }
}

public class UserDao extends GenericDao
{
    public User findById(String id)
    {
        CriteriaQuery query = criteriaBuilder.createQuery(entityClass);
        Root<P> entity = query.from(entityClass);
        query.select(entity);
        query.where(criteriaBuilder.equal(entity.get("id"), id.toUpperCase()));

        return executeCriteriaQuery(query);
    }
}

问题是:在扩展我的GenericDao的DAOs中构建的查询可能包含一个JOIN。我想向JOIN添加一个谓词,该谓词被添加到criteriaQuery中。

从我可以看到的情况来看,我可以使用JOIN检索查询中的From.getJoins()。然而,根据Javadoc的这种方法:

返回从此绑定类型生成的联接。如果没有从此绑定类型生成联接,则返回空集。对集合的修改不影响查询.。 返回:由此类型生成的联接

如何在我的JOIN中向criteriaQuery子句添加谓词

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-15 12:52:56

过了一段时间,我决定用另一种方法来解决这个问题。因为我找不到关于如何做到这一点的任何选项,所以我尝试在JPA实现级别上解决它。因为我使用Hibernate,所以我使用了Hibernate滤波器。对于Eclipselink用户:您可以使用Eclipselink的多租特性。

不幸的是,我未能在更高的层次上找到解决方案,因此如果要切换实现,我仍然必须为此编写一个新的实现。另一方面,我可能不会定期切换到新的实现,因此这可能不会成为一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22840829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档