用hibernate的感受

我用hibernate的时间也不算长,对hibernate并不是很了解 感觉用反向工程  hibernate用起来太方便啦 返回的还都是对象   太舒服了

可是随着写的程序的要求的变化,感到它每次返回的都是对象,有时还是挺不爽的,比如要查询元组的个数,还得一堆转换

eg. :long count=0;
          count= ( (Long) session.createQuery("select count(distinct sno)from Submit").iterate().next()).intValue();

 

我现在是想查询未提交答卷的学生的

String sql="from Login as lg " +
"where lg.sno not in " +
"(select sno from Submit )";


这样写不对,当登录或提交都不止一次时,需要去除重复
   * 因为每次读出一个学号  当登录2次时就会有2个学号(字符串)
   * 假如提交一次的话,那么就会有一个学号找不到与之对应的学号  所以那个学生又被查询出来了

 

现在我去重 :

String sql="select distinic sno from Login as lg " +
"where lg.sno not in " +
"(select sno from Submit )";

Query query=session.createQuery(sql);
  list=query.list();

这样也不对了

因为这样查出来得只是学号(字符串)而不是对象了

 

说明一点:我的主键id本身并没有什么意义,而且是自增的

如果用jdbc就没这种问题了

一种解决方法就是再hibernate框架下再去用jdbc,代码如下:

Session session=HibernateSessionFactory.getSession();
		Transaction tc=session.beginTransaction();
		
		String sql="select distinct sno,sname from login "+
				"where sno not in " +
				"(select distinct sno from Submit )";
		Connection conn=session.connection();
		try {
			Statement stmt=conn.createStatement();
			ResultSet rs=stmt.executeQuery(sql);
			while(rs.next()){
				System.out.println(rs.getString("sname"));
			}
			tc.commit();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			HibernateSessionFactory.closeSession();
		}

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值