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

hibernate问题,一对多查询
两个表,企业类型表和企业表。设置了一对多。

企业表的hibernate配置
XML code
<many-to-one name="type" column="fk_type_id" class="com.model.CompanyType" />

企业类型表的hibernate配置
XML code
<set name="companys" table="t_company" lazy="false" cascade="delete" inverse="true" order-by="pk_id">
            <key column="fk_type_id"/>
            <one-to-many class="com.model.Company"/>
        </set>


java代码:
Java code

String hql = "select company from Company company.state=1 ";
List<Company> list = companyDao.find(hql);



在后台列出企业列表的时候,控制台显示的sql是
select ....from t_company ...
select ....from t_companytype where companytype.pk_id=?
select ....from t_companytype where companytype.pk_id=?
select ....from t_companytype where companytype.pk_id=?
select ....from t_companytype where companytype.pk_id=?
......
显示多少条记录就会查询查询多少次企业类型表。

想问下大大们,有什么设置可以不用那么多sql语句就搞定啊?
是需要在配置的xml文件里面设置还是需要在程序里写啊。




------解决方案--------------------
楼主hql的问题
你用State state = session.get("select State from State s where s.id=1");
然后List<Company> list = state.getCompanies();
这样它就只会发出2条
一条是查询对应的state上来,第二条它会是用company.id in(,...)将company集合查询上来