现在我有一个主键表用户类型表(TB_USER_TYPE),一个外键表(TB_USER)create table USER_TYPE
(
   USER_TYPE_ID   int   not null,
   USER_TYPE_NAME varchar(320) not null 
)
create table USER
(
   USER_ID   int   not null,
   USER_NAME varchar(320) not null,
   USER_TYPE_ID int  not null
)在hibernate我怎么通过主键表的USER_TYPE_ID作为条件来查询外键表TB_USER的里的数据呢?
使用springDAO里集成的方法不管用
如User user=new User();
UserType userType =new UserType();
user.setUserTypeId(userType.getUserTypeId);
List list=this.findByExample(user);
System.out.println(list.size());
打出来的条数是数据库所有数据的条数。哎有没有方法解决。高手指点指点

解决方案 »

  1.   

    你把hibernate的showsql 打开看生成的sql 
    或者你自己写HQL 别用封装的方法
      

  2.   

    这个是要通过实体类的xml配置文件去实现的。根据你所说的,你应该是有两个实体类对应的xml文件。
    首先,你要在UserType类中加private List subUser = new ArrayList();
    你可以在UserType.hbm.xml中加入
    <list name="subUser" cascade="all"  inverse="true">
                <key>
                    <column name="userTypeId"/>//这个是UserType中的ID,我不知道你的首字母是大写还是小写的,下同
                </key>
                <list-index column="userId" base="1"/>
                <one-to-many class="UserType" />
    </list>
    这样应该是可以的,当然这个需要你多调试一下。希望对你有帮助。
      

  3.   

    写好映射文件中的实体关系,用级联查询获得,如果追求性能的话,那就自己写SQL查询,或者直接用存储过程
      

  4.   

    User user=new User();
    UserType userType =new UserType();
    user.setUserTypeId(userType.getUserTypeId);
    List list=this.findByExample(user);
    System.out.println(list.size());
    你的UserType没初始值就丢到set么
    Hibernate自动生成的函数好像没有实现两表联查,试试自己在DAO里面添加查询函数
      

  5.   

    。。还有个低效率方法
    在USER_TYPE中获得所有ID再遍历查询USER中的这些ID
    你还是无视这方法吧