xszhang911 2015-10-04 06:10 采纳率: 0%
浏览 1496

关于Hibernate的动态查询

今天修改原来的分页代码,如下:
DetachedCriteria dc=DetachedCriteria.forClass(Question.class);
dc.add(Restrictions.isNotNull("userid")); //不为空
List questions=(List) this.hibernateTemplate.findByCriteria(dc,0,3);
System.out.println("内容___"+questions.get(0).getContent()+"size-----"+questions.size());
System.out.println("内容___"+questions.get(1).getContent()+"size-----"+questions.size());
System.out.println("内容___"+questions.get(2).getContent()+"size-----"+questions.size());
我的意思是,在Question这张表中,所有userid不为null的字段,将第1条和第2条记录和第3条的内容输出.

但是我发现输出的内容全部都是第一条记录.虽然集合中的元素有3个,但是输出结果都是相同的第一条,请高手帮忙看看,哪里出问题了.

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 10:09
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你的代码在逻辑上是正确的,但是在执行过程中可能会有一些小错误。我建议你检查以下几个方面:

    1. Quesiton类是否正确定义了userid属性,并且它是一个@Column注解。

    2. 检查你在使用findByCriteria方法时传入的条件表达式是否正确。例如,如果userid属性被设置为@NotNull, 你应该确保在DetachedCriteria对象中使用Restrictions.isNotNull()而不是Restrictions.eq()

    3. 如果你的数据库支持索引,那么可能是因为没有正确创建或使用索引导致的问题。你可以尝试增加索引来提高性能。

    4. 确保你的JDBC连接是有效的,并且在调用findByCriteria之前已经获取到相应的数据源。

    5. 在循环中检查questions.size()是否等于期望的数量(即3),如果不是,请确保在循环外部添加适当的断言或者打印当前的迭代次数。

    6. 最后,如果你的数据库版本比较新,比如MySQL 8.0+, 你可能需要使用@Query注解来编写SQL语句,这样可以避免手动创建DetachedCriteria对象。

    希望这些建议能帮助你解决问题!

    评论

报告相同问题?