我正在使用hibernate模式。我需要在下面创建查询。subContest可能为null,在这种情况下,subContest_id=:cont不应将其作为where子句的一部分。在常规SQL中创建动态sql时;对于这种情况,我曾经做过,subContest_id = subContest_id ;但在以下情况下如何实现。在这里,如果我尝试这样做query.setParameter( "cont", "subContest_id " );,将给出异常,因为cont应该是id而不是字符串。
subContest_id=:cont
subContest_id = subContest_id ;
query.setParameter( "cont", "subContest_id " );
Query query = getEntityManager().createQuery( "select * from Upload where moderated=:mod, subContest_id=:cont order by lastModifiedTime desc " ); query.setParameter( "cont", subContest.getId() );
您可以尝试在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") );
请参考此处以了解有关如何使用条件查询的详细信息