如何使用hibernate从表中获取所选字段(我没有使用Criteria对象,而是使用CriteriaQuery对象,因此setProjection解决方案无法工作)

时间:2016-12-01 05:27:30

标签: java mysql hibernate field

我希望从表格中选择带有过滤器的字段。

例如: 如果我想根据名为" created_on"的表中的属性过滤我的结果,我会做http://example.com/users/?created_on = 01-12-2016

之类的操作

我通过这样做完成了上述任务:

public List<User> searchUser(List<SearchCriteria> params
            , int offset, int limit) {
        Session session = mysqlConnectionFactory.getSession();
        CriteriaBuilder builder = session.getCriteriaBuilder();
        CriteriaQuery<User> query = builder.createQuery(User.class);
        Root r = query.from(User.class);

        Predicate predicate = builder.conjunction();
        if (params != null) {
            for (SearchCriteria param : params) {
                if (param.getOperation().equalsIgnoreCase(">")) {
                    predicate = builder.and(predicate,
                            builder.greaterThanOrEqualTo(r.get(param.getKey()),
                                    param.getValue().toString()));
                } else if (param.getOperation().equalsIgnoreCase("<")) {
                    predicate = builder.and(predicate,
                            builder.lessThanOrEqualTo(r.get(param.getKey()),
                                    param.getValue().toString()));
                } else if (param.getOperation().equalsIgnoreCase(":")) {
                    if (r.get(param.getKey()).getJavaType() == String.class) {
                        predicate = builder.and(predicate,
                                builder.like(r.get(param.getKey()),
                                        "%" + param.getValue() + "%"));
                    } else {
                        predicate = builder.and(predicate,
                                builder.equal(r.get(param.getKey()), param.getValue()));
                    }
                }
            }
            query.where(predicate);
        }

        List<User> Users = session.createQuery(query)
                .setFirstResult(offset).setMaxResults(limit).getResultList();

        return Users;
    }

现在我还希望合并将为我返回所选字段的功能,我该怎么做?

0 个答案:

没有答案