使用hibernate分页,然后使用纯jdbc连接之后。。。

zailove1 2010-01-25 02:24:18
原先使用的是全部都是hibernate进行分页。完全可以实现

然后后来增加功能,由于实现的原因,使用的jdbc进行实现的。使用jdbc添加了数据之后

再用hibernate显示是页数出现错误。

和实际条数不服。只会显示没用纯jdbc的那个数

改怎么办
...全文
207 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zailove1 2010-01-26
  • 打赏
  • 举报
回复
我改好了。谢谢大家的帮助。
changshoujun 2010-01-25
  • 打赏
  • 举报
回复
自己写一个分页方法呢?
这是我用的。jdbc和hibernate都适用

package com.psit.struts.common;

public class Page {
/**
* 当前页
*/
private int currentPageNo;

/**
*下一页
*/
private int nextPageNo;

/**
* 上一页
*/
private int prePageNo;

/**
* 第一页
*/
private int firstPageNo;

/**
* 最后一页
*/
private int lastPageNo;

/**
* 页大小
*/
private int pageSize ;

/**
* 多少行
*/
private int rowsCount;

/**
* 多少页
*/
private int pageCount;

/**
* 初始化
* @param rowsCount
* @param pageSize
*/
public Page(int rowsCount,int pageSize)
{
this.rowsCount = rowsCount;
this.pageSize = pageSize;
}

public int getCurrentPageNo() {

if(this.currentPageNo > this.getLastPageNo())
{
this.setCurrentPageNo(this.getLastPageNo());
}
if(this.currentPageNo < this.getFirstPageNo())
{
this.setCurrentPageNo(this.getFirstPageNo());
}
return currentPageNo;
}

public void setCurrentPageNo(int currentPageNo) {
this.currentPageNo = currentPageNo;
}

/**
* 获得下一页码
* @return
*/
public int getNextPageNo() {
this.nextPageNo = this.currentPageNo + 1;

if(this.nextPageNo>this.getPageCount())
{
this.nextPageNo = this.getPageCount();
}
return nextPageNo;
}

/**
* 获得总页数
* @return
*/
public int getPageCount() {
if(this.rowsCount % this.pageSize == 0)
{
this.pageCount = this.rowsCount / this.pageSize;

}
else
{
this.pageCount = (this.rowsCount / this.pageSize) + 1;
}
return pageCount;
}

/**
* 获得前一页码
* @return
*/
public int getPrePageNo() {
this.prePageNo = this.currentPageNo - 1;
if(this.prePageNo <=0 )
{
this.prePageNo = 1;
}
return prePageNo;
}

/**
* 获得第一页
* @return
*/
public int getFirstPageNo() {
this.firstPageNo = 1;
return firstPageNo;
}

/**
* 获得最后一页
* @return
*/
public int getLastPageNo() {
this.lastPageNo = this.getPageCount();
return lastPageNo;
}

public int getPageSize() {
return pageSize;
}

public int getRowsCount() {
return rowsCount;
}

public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}

}

valen_jia 2010-01-25
  • 打赏
  • 举报
回复
session缓存问题吧,你试试清下缓存,重启一下次tomcat,再查看看有没有,如果有说明你分页查询没问题,你就在session前面加个刷新,要是还不对,就把你打印出来的sql语句放数据库里查,看看到底哪错了
crazylaa 2010-01-25
  • 打赏
  • 举报
回复
jdbc commit之后,要把hib的那个session刷新的。缓存问题。
zailove1 2010-01-25
  • 打赏
  • 举报
回复
呃 我的纯jdbc对数据库的操作只是向数据库中插入数据了

我看着这堆代码很乱。。由于导入部分字段涉及太多东西。 并且当时时间以及环境的要求,就用的纯的jdbc

纯的jdbc插入完成以后。其他的操作都使用的hibernate了。。。

现在改了一个地方 在hibernate分页的地方坐了修改。可以实现。但是有点小问题 正在调试
宏奕0920 2010-01-25
  • 打赏
  • 举报
回复
没代码,怎么分析啊
Y_2716 2010-01-25
  • 打赏
  • 举报
回复
纯JDBC不支持hibernate这种面向对象得查询语句吧

难道你不用hibernate 能直接用 FROM 实体名 查询出数据吗?

zm_hs 2010-01-25
  • 打赏
  • 举报
回复
多调试调试
zailove1 2010-01-25
  • 打赏
  • 举报
回复
我想原因肯定是 使用两种不同的方式操作是数据导致的。

纯jdbc的插入了数据 hibernate能查出数据。但是就是条数不正确,只能是hibernate分页的地方的错误

思路明确了。现在是hibernate的分页不是我做的。我刚接触。正在学,谢谢上面的解答。我挨着试试
landanlq 2010-01-25
  • 打赏
  • 举报
回复
学习
烟雨鹏城 2010-01-25
  • 打赏
  • 举报
回复
jdbc 保存数据库后没有通知session进行flush呗,你在使用session查询前做一个session.flush();看看
bjsuo 2010-01-25
  • 打赏
  • 举报
回复
和实际条数不服。只会显示没用纯jdbc的那个数 ,说明与缓存有关

jdbc commit后肯定是插入数据库了,不知道你的显示部分hibernate是怎么用的,检查一下这部分,最简单的方法:打开调试,看看发送sql没有
hitwd 2010-01-25
  • 打赏
  • 举报
回复
使用组件 分页吧
蛋黄车 2010-01-25
  • 打赏
  • 举报
回复
那就要看你的分页数据是放到什么作用域中了!通过什么方式实现的分页
zailove1 2010-01-25
  • 打赏
  • 举报
回复
代码太复杂了。。
并且这不是代码的问题。。。

这样吧。有一个查询界面是所有的客户资料。。 用hibernate实现了分页

然后有个导入,用的纯jdbc实现的。导入成功之后。这个页面不管怎么刷新。分页的地方,记录数页数都是导入之前的数。
Dazzlingwinter 2010-01-25
  • 打赏
  • 举报
回复
贴代码呗,有不晓得具体情况...
Hibernate中的query 博客分类: • Hibernate HibernateSQLSQL ServerMySQLJDBC Hibernate中的query.setFirstResult(),query.setMaxResults(); 一、query.scroll()和query.setFirstResult(),query.setMaxResults();这两种方法都可以取到一定范围内的数据,用来数据分页显示。那么两者区别,以及两者的效率如何? 答:1.scroll是用JDBC2.0的可滚动结果集实现;query.setMaxResults();query.setFirstResult()是数据库SQL语句实现。 2.你说是在数据库就分页好呢?还是把结果集都取到内存再分页好呢?(应该是在数据库就分了好些吧,但是如果在内存分页的话,换页的时候是不是更快一些呢?) 3.在数据库进行分页是首选的方式。数据库分页实际上是利用数据库本身SQL扩展的功能进行分页,例如MySQL的 limit 0,50这样的SQL语句。不但速度快,而且非常节省内存。不过不是每种数据库的都有这种分页支持的SQL,例如SQL Server就不支持。 4.scroll是利用JDBC2.0的功能做分页的,那么就完全取决于特定数据库的JDBC Driver的实现了。事实上大部分JDBC Driver都是把所有的结果集都一次取到内存,然后再分页的。如果这个结果集非常大,例如几万条,不但程序执行速度会很慢,而且很容易导致out of memory。当然个别JDBC Driver使用了服务器端游标来实现,那么就不会导致这种问题,例如jTDS。 二、Hibernate可以使用Query.setMaxResults方法简单地设置需要查询的最大结果集。 然后Hibernate会自动根据所设置的数据库方言翻译成相应的SQL语句提交给数据库。比如如果数据库是Oracle,SQL Server等,则翻译为类似select ... top 10之类的SQL语句,若是MySQL,则翻译为select ... limit 10之类的SQL。 三、举例: Java代码 1. import org.hibernate.Query; 2. 3. query.setFirstResult(0),query.setMaxResults(4);相当于MySQL中的limit 0, 4; 4. public void testQuery() { 5. Session session = null; 6. try { 7. session = HibernateUtils.getSession(); 8. session.beginTransaction(); 9. Query query = session.createQuery("from User"); 10. query.setFirstResult(0);//从第一条记录开始 11. query.setMaxResults(4);//取出四条记录 12. List userList = query.list(); 13. for (Iterator iter=userList.iterator(); iter.hasNext();) { 14. User user = (User)iter.next(); 15. System.out.println(user.getId()); 16. System.out.println(user.getName()); 17. } 18. session.getTransaction().commit(); 19. }catch(Exception e) { 20. e.printStackTrace(); 21. session.getTransaction().rollback(); 22. }finally { 23. HibernateUtils.closeSession(session); 24. } 25. }

81,116

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧