在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是什么的想法?
答案 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>