hibernate-查询返回类型

hibernate-查询返回类型,hibernate,mapping,hibernate-mapping,Hibernate,Mapping,Hibernate Mapping,我有一个(相对)简单的HQL查询,它返回两个具有一对多关系的连接实体。 作为查询的结果,我希望获得entity1类型的列表,其中映射了entity1.entity2。 因为我在结果集中得到一个笛卡尔积,其中对于每个entity2(多面),我有一行,我得到entity1的副本。 因此,如果我列出()结果,就会得到重复的条目 为了解决这个问题,我使用query.setResultTransformer(Criteria.DISTINCT\u ROOT\u ENTITY) 但是,这并不总是返回rnti

我有一个(相对)简单的HQL查询,它返回两个具有一对多关系的连接实体。 作为查询的结果,我希望获得entity1类型的列表,其中映射了entity1.entity2。 因为我在结果集中得到一个笛卡尔积,其中对于每个entity2(多面),我有一行,我得到entity1的副本。 因此,如果我列出()结果,就会得到重复的条目

为了解决这个问题,我使用
query.setResultTransformer(Criteria.DISTINCT\u ROOT\u ENTITY)

但是,这并不总是返回rntity1的列表,有时返回entity2的列表


有没有办法指定ResultSet的“main”实体?

您的第二个查询要求同时返回消息和命令,因此您可以同时获得这两种类型的对象。只要让它返回味精

您应该能够将所需的WITH移到WHERE子句中

SELECT msg FROM Messages AS msg LEFT JOIN FETCH msg.commands AS cmd WHERE( lower( cmd.status ) = 'failed' )

'SELECT msg FROM com.intelerad.hibernate.spike.models.Messages AS msg LEFT JOIN feetch msg.commands AS cmd WITH(lower(cmd.status)=\'failed\')给出了一个“在获取的关联上不允许使用WITH子句;”'SELECT msg,cmd FROM Messages AS msg LEFT JOIN msg.commands AS cmd WITH(lower(cmd.status)=failed)'返回错误的根实体(命令而不是消息),这不是我想要得到的。“LEFT JOIN FETCH msg.commands ON lower(cmd.status)='failed'”与“LEFT JOIN FETCH msg.commands WHERE lower(cmd.status)='failed'”之间存在显著差异。在我的例子中,第一个命令将返回消息的子集,仅返回sendCommands失败的消息,而另一个命令将返回所有消息,只使用SendCommands的一个子集,我在SQL中对第1和第2条进行了左连接,它起到了作用——我只需要在HQL中使用它——这是我知道我过去使用HQL能够实现的事情之一,现在我无法理解我是如何做到的。我得花点时间在上面。你不能在HQL中使用左连接获取,因为Hibernate希望集合与数据库匹配。它要么已完全填充,要么根本未获取。我现在不能测试这个,但是你得到的错误不是建议尝试一个过滤器吗?