Java 在hibernate中使用多表,输出有问题

Java 在hibernate中使用多表,输出有问题,java,hibernate,orm,Java,Hibernate,Orm,我使用下面的查询 from A as a,B as b,C as c where a.val='1' and b.val=a.val and c.val=b.val 现在如果我真的跟着 query.list(); 输出是什么 另外,如果我想获得上述查询的输出,我还必须做什么?嗨,这不是正确的方法。为此,您必须使用条件编写嵌套查询。这将类似于以下内容: String query="from A a where a.val in (select b.val from B b where b.v

我使用下面的查询

from A as a,B as b,C as c where a.val='1' and b.val=a.val and c.val=b.val
现在如果我真的跟着

query.list();
输出是什么


另外,如果我想获得上述查询的输出,我还必须做什么?

嗨,这不是正确的方法。为此,您必须使用条件编写嵌套查询。这将类似于以下内容:

 String query="from A a where a.val in (select b.val from B b where b.val in (select c.val from C c where c.val='1'))";    
 Criteria criteria = session.getSession().createCriteria(TableName.class);
        criteria.add(Restrictions.sqlRestriction(query));
   List<tableNameObj> tableNameObj=criteria.list();

希望这能解决您的问题。

您好,这不是正确的方法。为此,您必须使用条件编写嵌套查询。具体如下:

 String query="from A a where a.val in (select b.val from B b where b.val in (select c.val from C c where c.val='1'))";    
 Criteria criteria = session.getSession().createCriteria(TableName.class);
        criteria.add(Restrictions.sqlRestriction(query));
   List<tableNameObj> tableNameObj=criteria.list();

希望这能解决您的问题。

来自Hibernate参考文档:

可以出现多个类,从而 在笛卡尔乘积或十字中 加入

因此,您的查询将返回一个笛卡尔积,如果a中有X个匹配行,B中有Y个匹配行,C中有Z个匹配行,您将得到X*Y*Z结果,并且积可以很快变大


对此类查询要非常小心,它们对资源非常贪婪,可能会导致严重的性能问题。

来自Hibernate参考文档:

select a from A as a 
join fetch B as b 
join fetch C as c 
where a.val='1' 
and b.val=a.val 
and c.val=b.val

可以出现多个类,从而 在笛卡尔乘积或十字中 加入

因此,您的查询将返回一个笛卡尔积,如果a中有X个匹配行,B中有Y个匹配行,C中有Z个匹配行,您将得到X*Y*Z结果,并且积可以很快变大

对这类查询要非常小心,它们对资源非常贪婪,可能会导致严重的性能问题

select a from A as a 
join fetch B as b 
join fetch C as c 
where a.val='1' 
and b.val=a.val 
and c.val=b.val
你可以使用join

return List<A>
你可以使用a.getB.get。。。。获取您的数据

你可以使用join

return List<A>

你可以使用a.getB.get。。。。获取您的数据

此查询不会提供表B中的数据,但我要求表B和表C中的数据也与表A一起列出。。。因此,我认为这个查询将不起作用……那么您编写的查询是完美的。它可能会给您空结果,因为A、B或C中的一个表没有该记录。查询运行得非常好,它将输出作为对象[],对象为A、B,所有这些表都是用外键映射的,不可能为空…..此查询不会提供表B中的数据,但我要求表B和表C中的数据也与表A一起列出。。。因此,我认为这个查询将不起作用……那么您编写的查询是完美的。它可能会给您空结果,因为A、B或C中的一个表没有该记录。查询运行得非常好,它将输出作为对象[],对象为A、B,所有这些表都是用外键映射的,不可能为空。@abhishekgem84:请用纯英语解释你的目标,也许我能帮你。@abhishekgem84:请用纯英语解释你的目标,也许我能帮你。