一尘不染

在Hibernate中创建动态sql时;我如何实现1 = 1

hibernate

我正在使用hibernate模式。我需要在下面创建查询。subContest可能为null,在这种情况下,subContest_id=:cont不应将其作为where子句的一部分。在常规SQL中创建动态sql时;对于这种情况,我曾经做过,subContest_id = subContest_id ;但在以下情况下如何实现。在这里,如果我尝试这样做query.setParameter( "cont", "subContest_id " );,将给出异常,因为cont应该是id而不是字符串。

    Query query = getEntityManager().createQuery( "select * from Upload where moderated=:mod, subContest_id=:cont order by lastModifiedTime desc " );
    query.setParameter( "cont", subContest.getId() );

阅读 418

收藏
2020-06-20

共1个答案

一尘不染

您可以尝试在hibernate中使用条件查询

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

您可以添加where子句作为限制

Criteria criteria = session.createCriteria(Upload.class)
    .add(Restrictions.eq("mode", value));

在您的情况下,您想在添加限制之前检查null

if(subContest_id!=null){
        criteria.add(Expression.le("subContest_id",subContest_id));
    }

最后可以使用此命令

Criteria criteria = session.createCriteria(Upload.class)
    .addOrder( Order.desc("lastModifiedTime") );

请参考此处以了解有关如何使用条件查询的详细信息

2020-06-20