自动投放相关属性

时间:2017-02-03 12:53:23

标签: java mysql hibernate hibernate-criteria

我有以下情况:

//...
final Criteria dbCriteriaQuery = sessionFactory.getCurrentSession().createCriteria(User.class);
searchCriterias.forEach(searchCriteria -> addCriteriaRestrictionForUserClass(dbCriteriaQuery, searchCriteria));
final List list = dbCriteriaQuery.list();
//...

private void addCriteriaRestrictionForUserClass(Criteria criteria, SearchCriteria search) {
        final SimpleExpression property;

        switch (search.getOperator()) {
            case ">": property = Restrictions.gt(search.getPropertyName(), search.getSearchValue()); break;
            case "<": property = Restrictions.lt(search.getPropertyName(), search.getSearchValue()); break;
            case "=": property = Restrictions.eq(search.getPropertyName(), search.getSearchValue()); break;
            case "<>": property = Restrictions.ne(search.getPropertyName(), search.getSearchValue()); break;
            default: throw new InvalidDtoException();
        }

        criteria.add(property);
    }

我在search.getSearchValue()获得了例外。问题是,这些值总是字符串,而User.class的链接属性可以是任何类型。

有没有办法在这里进行自动投射?或者我真的需要先找出属性的类型 - &gt;将String值转换为任何类型的Object,然后将它放入查询中?

有可能做这样的事情:

Restrictions.gtProperty(x, y);

Casting在这里工作,但你需要双方的真实属性,它们以某种方式链接到查询。

我认为这应该在某个地方实施。所有这些算法都必须确定property的类型并以适当的格式投射value

0 个答案:

没有答案