Java 如何在Hibernate中实现多个内部联接
产品模板、产品帐户、产品样式和产品帐户是表。 mysql命令:Java 如何在Hibernate中实现多个内部联接,java,hibernate,criteria,Java,Hibernate,Criteria,产品模板、产品帐户、产品样式和产品帐户是表。 mysql命令: select distinct product_template.id as ptid from product_account inner join product on product_account.productId=product.id inner join product_style on product.productStyleId=product_style.id inner join product_templat
select distinct product_template.id as ptid from product_account inner join product on product_account.productId=product.id inner join product_style on product.productStyleId=product_style.id inner join product_template on product_style.productTemplateId=product_template.id where product_account.sellerId=1 and product_account.productAccountType=1;
Mysql命令运行良好,但我不知道如何在条件中实现。我的代码:
criteriac=createCriteria(ProductAccount.class);
ProjectionList ProjectionList=Projections.ProjectionList();
c、 添加(Restrictions.eq(“seller”,query.getSeller());
c、 添加(Restrictions.eq(“productAccountType”,query.getProductAccountType());
c、 createCriteria(“产品”).createCriteria(“产品样式”).createCriteria(“产品模板”);
c、 setProjection(Projections.distinct(Projections.property(“id”));
List objects=c.List();
我只获得product_帐户的id,但我需要product_模板的id。任何人都将不胜感激。提前感谢。criteriac=createCriteria(ProductAccount.class);
Criteria c = createCriteria(ProductAccount.class);
c.add(Restrictions.eq("seller", query.getSeller()));
c.add(Restrictions.eq("productAccountType", query.getProductAccountType()));
c.createCriteria("product")
.createCriteria("productStyle")
.createCriteria("productTemplate", "pt"); //This needs an alias
c.setProjection(Projections.projectionList()
.add( Projections.distinct( Projections.property("id") ) )
.add( Projections.property("pt.id") )); //Add it to the projection list
List<Object> objects = c.list();
c、 添加(Restrictions.eq(“seller”,query.getSeller());
c、 添加(Restrictions.eq(“productAccountType”,query.getProductAccountType());
c、 创建标准(“产品”)
.createCriteria(“productStyle”)
.createCriteria(“产品模板”、“pt”)//这需要一个别名
c、 setProjection(Projections.projectionList()项目)
.add(projects.distinct(projects.property(“id”))
.add(Projections.property(“pt.id”))//将其添加到投影列表中
List objects=c.List();
顺便说一句,您的代码是否已经运行了?因为第一个criteria类丢失了
Criteria c = createCriteria();
c.add(Restrictions.eq("seller", query.getSeller()));
c.add(Restrictions.eq("productAccountType", query.getProductAccountType()));
c.createCriteria("product").createCriteria("productStyle").createCriteria("productTemplate", "pt");
c.setProjection(Projections.distinct(Projections.property("pt.id")));
List<Object> objects = c.list();
criteriac=createCriteria();
c、 添加(Restrictions.eq(“seller”,query.getSeller());
c、 添加(Restrictions.eq(“productAccountType”,query.getProductAccountType());
c、 createCriteria(“产品”).createCriteria(“产品样式”).createCriteria(“产品模板”、“pt”);
c、 setProjection(Projections.distinct(Projections.property(“pt.id”)));
List objects=c.List();
您可以发布pojo类实现吗请查看您的createCriteria
方法实现可能不正确。请把它包括在问题中。
Criteria c = createCriteria();
c.add(Restrictions.eq("seller", query.getSeller()));
c.add(Restrictions.eq("productAccountType", query.getProductAccountType()));
c.createCriteria("product").createCriteria("productStyle").createCriteria("productTemplate", "pt");
c.setProjection(Projections.distinct(Projections.property("pt.id")));
List<Object> objects = c.list();