Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate HQL和一对多查询_Hibernate_Hql - Fatal编程技术网

Hibernate HQL和一对多查询

Hibernate HQL和一对多查询,hibernate,hql,Hibernate,Hql,我有如下Hibernate域对象: class Player { List<Item> inventory; } class Item { List<Enchantment> enchantments; } class Enchantment { boolean isSuperiorEnchantment; } 职业玩家{ 列出存货清单; } 类项目{ 列出魔法; } 阶级魅力{ 花被着床; }

我有如下Hibernate域对象:

   class Player {
      List<Item> inventory;
   }

   class Item {
      List<Enchantment> enchantments;
   }

   class Enchantment {
      boolean isSuperiorEnchantment;
   }
职业玩家{
列出存货清单;
}
类项目{
列出魔法;
}
阶级魅力{
花被着床;
}
我需要构造一个HQL查询,该查询向我返回一个所有玩家的列表,其中至少有一个项目上有一个附魔,并且设置了
issuperiorenchant
标志。我一辈子都想不出用HQL来表达这一点的方法


有什么想法吗?

假设以上所有方面都有适当的映射,您要查找的查询是:

select p
from Player as p
  left join p.inventory as i
  left join i.enchantments as e
where e.isSuperiorEnchantment = 1

谢谢,这很有效。我必须记得在它的前面加上一个“select p”,否则它正是我所需要的!我只是在学习HQL,但在常规SQL中这是行不通的——左连接意味着您将获得播放器结果,即使在资源清册和附魔中没有匹配的记录。(我将继续挖掘以澄清这一点……我怀疑“left join”在HQL中的含义有所不同,否则这个查询将不会有多大用处)。@RobWhelan上述查询将起作用(当然,对语法进行适当调整)在常规SQL中,由于
e.issupperiorenchanment=1
条件对没有附魔的玩家来说是不满意的,因为
issupperiorenchanment
将返回为null。@ChssPly76啊,你是对的——我把它理解为一个“on”子句,而不是常规的“where”。尽管构造查询仍然是一种奇怪的方式——通常您只需要使用普通的旧内部联接,查询优化器甚至可以在点击过滤器之前忽略所有缺少资源清册或附魔的玩家行。