日期:2014-05-17  浏览次数:20865 次

Hibernata无主键表查询问题
自动生成的HBM
  <class name="com.cntomorrow.zyqx.entity.Yhgwdz" table="用户岗位对照表" schema="TELEUSER">
  <composite-id name="id" class="com.cntomorrow.zyqx.entity.YhgwdzId">
  <key-many-to-one name="yhjbxx" class="com.cntomorrow.zyqx.entity.Yhjbxx" lazy="false">
  <column name="用户ID" length="6" />
  </key-many-to-one>
  <key-many-to-one name="gwxx" class="com.cntomorrow.zyqx.entity.Gwxx" lazy="false">
  <column name="岗位ID" length="6" />
  </key-many-to-one>
.......
 
还有两个类,一个只有ID属性的类,一个有其他属性的类(因为表没有主键)
然后我想加个条件,只能加到这个只有ID属性的类里面。
如下:
Yhgwdz yhh=new Yhgwdz();//只有id属性的那个类
  YhgwdzId yy=new YhgwdzId();//其他属性的类
  Page page=new Page();
  Yhjbxx yh=new Yhjbxx();
  yh.setYhid(212);//加入条件
  yy.setYhjbxx(yh);
  yhh.setId(yy);//加入条件
 
然后通过这个查询
Session sss = getSession();
  Criteria criteria = sss.createCriteria(Yhgwdz.class);
  
  if (yhgwdz != null) {
  if (yhgwdz.getId() != null && !"".equals(yhgwdz.getId())) {
  criteria.add(Restrictions.eq("id", yhgwdz.getId()));
  }
List lii = criteria.list();
 
 
结果我发现他把所有条件都给列上了。肯定是除了我传的那个条件,剩下的都为空,所以导致查不出东西来。不传条件一切正常。以下是自动生成sql语句:
select this_.用户ID as 用户ID6_0_, this_.岗位ID as 岗位ID6_0_, this_.部门ID as 部门ID6_0_, this_.加入时间 as 加入时间6_0_, this_.批准人ID as 批准人ID6_0_, this_.操作者ID as 操作者ID6_0_ from TELEUSER.用户岗位对照表 this_ where (this_.用户ID=? and this_.岗位ID=? and this_.部门ID=? and this_.加入时间=? and this_.批准人ID=? and this_.操作者ID=?)
 
 
 
求解怎么修改正常

------解决方案--------------------
Java code

Session session = HibernateSessionFactory.getSession();
 Transaction tran = session.beginTransaction();
Query query = session.createSQLQuery("select * from userInfowhere yhid=? and yhjbxx=?");
 query.setString(0, "");
 query.setString(你数据库字段的位置, "");
tran.commit();
List l = query.list();
 if(l.size() != 0 ){
 System.out.println(l.size());
         }
         else{
             System.out.println("login fail");
        }
     }

------解决方案--------------------
你的dao实现类可以继承HibernateDaoSupport
public class QueryDaoImpl extends HibernateDaoSupport implements QueryDao

可以使用sessionfactory,SessionFactory sessionFac= this.getSessionFactory();