查询Hibernate多对多关联

时间:2010-05-17 16:30:49

标签: hibernate many-to-many associations

在Hibernate HQL中,您将如何通过多对多关联进行查询。如果我的公司有多个ProductLines而其他公司可以提供这些相同的产品系列,我有一个公司实体,一个ProductLine实体和一个关联表CompanyProductLine。在SQL中,我可以得到我需要的东西:

select * from company c where c.companyId in (select companyId from companyProductLine cpl, productline pl where cpl.productLineId = pl.productLineId and pl.name= 'some value');

我的问题在于我在Company.hbm.xml文件中定义的关联:

<set name="productLines" 
     cascade="save-update" 
     table="CompanyProductLine">
   <key column="companyId"/>
   <many-to-many class="com.foo.ProductLine" column="productLineId" />
</set> 

我似乎提出的任何HQL都会抛出:'期待'元素'或'索引''Hibernate异常。

关于适当的HQL是什么的想法?

1 个答案:

答案 0 :(得分:4)

您的hql查询应如下所示:

from Company c join c.productLines pl where pl.name = :name

像这样的映射:

<hibernate-mapping>
    <class name=com.example.ProductLine" table="productLine">
        <cache usage="read-write"/>
        <id name="id" column="id" type="long">
            <generator class="native"/>
        </id>
        <property name="name" column="name"/>
    </class>
</hibernate-mapping>

<hibernate-mapping>
    <class name="com.example.Company" table="company">
        <cache usage="read-write" />
        <id name="id" column="id" type="long">
            <generator class="native" />
        </id>
        <set name="productLines" table="companyProductLine" lazy="false">
            <key column="companyId" />
            <many-to-many class="com.example.ProductLine" column="productLineId" />
        </set>
    </class>
</hibernate-mapping>