在执行一个普通的查询,取某个持久化对象中5条记录时发现多了5条sql语句,请大侠指点!查询dao的实现
 public List<UserFriend> findAll(User user, int begin, int number) {
    Session session = sessionFactory.openSession();
    try {
      session.beginTransaction();
      return session.createQuery("from UserFriend o where o.user=?")
          .setParameter(0, user).setFirstResult(begin).setMaxResults(number)
          .list();
    } finally {
      session.getTransaction().commit();
      session.close();
    }
  }生成的语句为:
Hibernate: select userfriend0_.Id as Id2_, userfriend0_.userId as userId2_, userfriend0_.userIdFriend as userIdFr3_2_ from T_UserFriend userfriend0_ where userfriend0_.userId=? limit ?
Hibernate: select user0_.Id as Id1_0_, user0_.username as username1_0_, user0_.password as password1_0_ from T_User user0_ where user0_.Id=?
Hibernate: select user0_.Id as Id1_0_, user0_.username as username1_0_, user0_.password as password1_0_ from T_User user0_ where user0_.Id=?
Hibernate: select user0_.Id as Id1_0_, user0_.username as username1_0_, user0_.password as password1_0_ from T_User user0_ where user0_.Id=?
Hibernate: select user0_.Id as Id1_0_, user0_.username as username1_0_, user0_.password as password1_0_ from T_User user0_ where user0_.Id=?
Hibernate: select user0_.Id as Id1_0_, user0_.username as username1_0_, user0_.password as password1_0_ from T_User user0_ where user0_.Id=?下面5条语句是怎么来的呢?

解决方案 »

  1.   

    Hibernate只不过给字段和表取了个别名啊!
      

  2.   

    Hibernate: select user0_.Id as Id1_0_, user0_.username as username1_0_, user0_.password as password1_0_ from T_User user0_ where user0_.Id=?
    Hibernate: select user0_.Id as Id1_0_, user0_.username as username1_0_, user0_.password as password1_0_ from T_User user0_ where user0_.Id=?
    Hibernate: select user0_.Id as Id1_0_, user0_.username as username1_0_, user0_.password as password1_0_ from T_User user0_ where user0_.Id=?
    Hibernate: select user0_.Id as Id1_0_, user0_.username as username1_0_, user0_.password as password1_0_ from T_User user0_ where user0_.Id=?
    Hibernate: select user0_.Id as Id1_0_, user0_.username as username1_0_, user0_.password as password1_0_ from T_User user0_ where user0_.Id=?
    这几条语句是怎么来的?我想问的是
      

  3.   

    userfriend表的字段有id userid userfriendid映射关系   <many-to-one name="user" lazy="false">
          <column name="userId" />
        </many-to-one>
        <many-to-one name="userFriend" lazy="false">
          <column name="userIdFriend" />
      

  4.   

    T_UserFriend  和T_User是多对1关系,读取T_UserFriend的时候 把符合条件的T_UserFriend和T_UserFriend有关联的T_User都读取出来, 关键看你需要不,不要的话在 <many-to-one name="user" lazy="false"  cascade="none" 就行了。
      

  5.   

    恩,还有个问题就是这里面关于user和 friend 的关联其中有两个表,user和userfriend
    user表中字段主要有 uid name...
    userfriend 表     id userid userfriendid ,其中userid和userfriendid是user表的外键,我的想法是user和friend是多对多的关系,中间表是userfriend.只不过friend和user实体是一个
    但案例中却这样表示有两个实体(pojo)
    pubic class user{
    }
    public class userfriend
    {
      id;  user uid;
      user fid;
    }
    userfriend配置文件
    many-to-one name="user" lazy="false"> 
          <column name="userId" /> 
        </many-to-one> 
        <many-to-one name="userFriend" lazy="false"> 
          <column name="userIdFriend" />这样写的话 <many-to-one name="userFriend" lazy="false"> 这句该怎么解释呢?