0

我正在使用休眠。我需要在下面创建查询。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() );
4

2 回答 2

2

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

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));
    }


最后 order by 可以使用这个来完成

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

有关如何使用条件查询的详细信息,请参阅此处

于 2012-05-28T06:02:44.207 回答
1
     Query query = null;
     if(cont != null){
        query = getEntityManager().createQuery( "select * from Upload where moderated=:mod, subContest_id=:cont order by lastModifiedTime desc " );
 query.setParameter( "cont", subContest.getId() );
 query.setParameter( "mod", moderated.getId() );
     } esle {
        query = getEntityManager().createQuery( "select * from Upload where moderated=:mod order by lastModifiedTime desc " );
 query.setParameter( "mod", moderated.getId() );
     }
于 2012-05-28T09:25:05.657 回答