因为我的数据库是很久之前的老表,所以没有建主键,我就用这个表中的2个字段做联合主键。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.efesco.employee.model.FsGetbackpwdMail" table="FS_GETBACKPWD_MAIL" schema="programmer">
     <composite-id>
      <key-property name="regNo" type="java.lang.String" >
            <column name="REG_NO" length="10" />
          <!--   <generator class="sequence" />--> 
        </key-property>
          <key-property name="mailTime" type="java.util.Date">
            <column name="MAIL_TIME" length="7" />
        </key-property>
     </composite-id>
      <property name="ip" type="java.lang.String" not-null="false">
            <column name="IP" length="15" />
        </property>
        <property name="enStr" type="java.lang.String" not-null="false">
            <column name="EN_STR" length="64" />
        </property>
        <property name="mail" type="java.lang.String" not-null="false">
            <column name="MAIL" length="100" />
        </property>
          <property name="updateTime" type="java.util.Date" not-null="false">
           <column name="UPDATE_TIME" length="7"/>
        </property>
         <property name="valid" type="java.lang.String" not-null="false">
            <column name="VALID" length="1" />
        </property>
        <property name="ipUpdate" type="java.lang.String" not-null="false">
            <column name="IP_UPDATE" length="15" />
        </property>
        <property name="userName" type="java.lang.String" not-null="false">
            <column name="USER_NAME" length="20" />
        </property>
    </class>
</hibernate-mapping>
上面是配置文件。
我在dao里面用hql按条件查询,查询的hql为from FsGetbackpwdMail where enStr=? and valid='1'。
但是查询的时候有2条数据满足条件,我跟踪调试,集合里面的2条是一模一样的。我将hql生成的sql语句给定条件到数据库里面查询条数是符合,就是查询的时候list集合里面的数据hql是重复的。不知道联合查询为什么按条件查询对象会出现这种情况。
Hibernatesshhql

解决方案 »

  1.   

    String hql = "from FsGetbackpwdMail where enStr=? and valid='1'";
    List list=queryByHql2(hql,new Object[]{enStr});

    return list;这个方法就是 return getBHibernateTemplate().find(hql, args);
    就是根据这个来查询,得到List集合的。
      

  2.   

    我查了,也重写了com.efesco.employee.model.FsGetbackpwdMail这个类里面的hashcode还有equals方法,但是查询的时候还是重复的。
      

  3.   

    知道吗,hibernate的联合主键是有点搞。
      

  4.   

    queryByHql2就是return getBHibernateTemplate().find(hql, args);这个方法。
      

  5.   


    queryByHql2就是return getBHibernateTemplate().find(hql, args);这个方法。
      

  6.   

    from FsGetbackpwdMail fbk where fbk.enStr=? and fbk.valid='1'
    这样试下。
      

  7.   

    org.springframework.orm.hibernate3.support.HibernateDaoSupport里面不是有
    getBHibernateTemplate().find(hql, args);这个方法吗?
      

  8.   

    我只见过getHibernateTemplate() ,木有看到过getBHibernateTemplate()
      

  9.   

    是一样,我只是用一个类继承了HibernateTemplate