Hibernate(HQL)-如何从多对多表中查找唯一查询?
但实际上它会找到这个菜单 我怎么做 问题2: 我想找到其项目的ItemID同时为1和2的菜单。 我尝试这样做hql: 选择菜单 从“菜单”菜单中的Inmenu.items项 其中items.itemId位于1,2中 但实际上,它会发现菜单的itemIds是1或2,而不是1和2。 我怎么做Hibernate(HQL)-如何从多对多表中查找唯一查询?,hibernate,hql,Hibernate,Hql,但实际上它会找到这个菜单 我怎么做 问题2: 我想找到其项目的ItemID同时为1和2的菜单。 我尝试这样做hql: 选择菜单 从“菜单”菜单中的Inmenu.items项 其中items.itemId位于1,2中 但实际上,它会发现菜单的itemIds是1或2,而不是1和2。 我怎么做 谢谢。如果可以接受,我建议您对此使用条件查询。以下是代码片段 select menu from Menu menu, In(menu.items) items where items.itemId not
谢谢。如果可以接受,我建议您对此使用条件查询。以下是代码片段
select menu
from Menu menu, In(menu.items) items
where items.itemId not in (1,2)
这将为您提供ItemId不等于1和2的所有菜单
对其他问题也使用类似的查询。希望这对您有所帮助。
顺便说一句,我还没有测试过这个解决方案。我自己发现的
1.from Menu Menu,其中2=在1,2中的Menu.itemsitems where items.items id中,从菜单菜单中选择countmenu.id
2.从menu2菜单中选择menu2,其中3=从Menu菜单中选择countmenu.id,在Menu.items项目中,在1,2,3和Menu.MENUD中选择items.itemId。MENUD=menu2.MENUD项目id在表中是否唯一?是否有任何错误或给出的结果无效?顺便说一句,如果它给出了无效的结果,你能把它生成的SQL发布给我吗?如果出现错误,则返回错误消息
<class name="Menu" table="menu">
<id name="menuId" type="java.lang.Integer" column="menuId">
<generator class="increment"></generator>
</id>
<property name="name" type="string" column="menuName" length="100"></property>
<set access="property" lazy="true" inverse="false" cascade="save-update"
name="items" batch-size="10" fetch="select" table="menu_item">
<key column="menuId" />
<many-to-many class="Item" column="itemId" />
</set>
<class name="Item" table="item">
<id name="itemId" type="java.lang.Integer" column="itemId">
<generator class="increment"></generator>
</id>
<property name="name" type="string" column="itemName" length="100"></property>
<set access="property" lazy="true" inverse="false" cascade="save-update"
name="menus" batch-size="10" fetch="select" table="menu_item">
<key column="itemId" />
<many-to-many class="Menu" column="menuId" />
</set>
</class>
select menu
from Menu menu, In(menu.items) items
where items.itemId not in (1,2)
DetachedCriteria dc = DetachedCriteria.forClass(Menu.class);
List<Menu> list = new ArrayList<Menu>();
dc.createAlias("items","item");
dc.add(Restrictions.and(
Restrictions.ne("item.itemId",1),
Restrictions.ne("item.itemId",2)));
list = hibernateTemplate.findByCriteria(dc);