Java Hibernate Critieria连接两个表,条件为第二个表,结果为第一个表

Java Hibernate Critieria连接两个表,条件为第二个表,结果为第一个表,java,hibernate,criteria,Java,Hibernate,Criteria,我在使用Hibernate条件时遇到了一个问题,我需要使用条件转换此查询 在(X,Y)中,从A_uu.column1=B_.column1和B_.column2上的A_u.内部连接B_u中选择*并激活='Y' 我需要表A中的结果。如果定义了关联,请参阅 如果实体定义中未指定关联,则不能使用条件。 您可以使用HQL进行内部连接(需要写入),对于左连接,您必须使用本机SQL。我刚刚解决了这个问题,下面是我的代码 Criteria criteria = session.createCr

我在使用Hibernate条件时遇到了一个问题,我需要使用条件转换此查询

在(X,Y)中,从A_uu.column1=B_.column1和B_.column2上的A_u.内部连接B_u中选择*并激活='Y'


我需要表A中的结果。

如果定义了关联,请参阅

如果实体定义中未指定关联,则不能使用条件。
您可以使用HQL进行内部连接(需要写入),对于左连接,您必须使用本机SQL。

我刚刚解决了这个问题,下面是我的代码

        Criteria criteria = session.createCriteria(ProductOffer.class);
        criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

        Date effDate = TypeConvertUtil.toDate(param.get("effDate"));

        criteria.add(Restrictions.le("effDate", effDate));
        criteria.add(Restrictions.gt("expDate", effDate));


        criteria.createAlias("productOfferPropDefs", "def",JoinType.LEFT_OUTER_JOIN);
        criteria.setFetchMode("productOfferPropDefs", FetchMode.JOIN);
        criteria.add(Restrictions.le("def.effDate", effDate));
        criteria.add(Restrictions.gt("def.expDate", effDate));


        criteria.createAlias("def.productOfferProps", "prop",JoinType.LEFT_OUTER_JOIN);
        criteria.setFetchMode("def.productOfferProps", FetchMode.JOIN);
        criteria.add(Restrictions.le("prop.effDate", effDate));
        criteria.add(Restrictions.gt("prop.expDate", effDate));

        productOfferList = criteria.list();
请注意这一点

criteria.createAlias("productOfferPropDefs", "def",JoinType.LEFT_OUTER_JOIN);
此参数很重要:

JoinType.LEFT_OUTER_JOIN

如果您没有使用它,并且您的关系是一对多的,那么它将出现hibernate的1:N经典问题

您能在这里写下生成的sql查询吗?表和列名与讨论中的示例不匹配。