Java 在Hibernate中嵌套createAlias()
我必须使用Hibernate进行特定的查询 下面的课程只是一个简单的例子,让您更容易理解我的场景和目标。我在写这篇文章时编了一个例子,我希望我没有犯错误(无论如何不要注意错误:D) 但我不能再进一步了。我需要像这样的东西:Java 在Hibernate中嵌套createAlias(),java,hibernate,criteria,Java,Hibernate,Criteria,我必须使用Hibernate进行特定的查询 下面的课程只是一个简单的例子,让您更容易理解我的场景和目标。我在写这篇文章时编了一个例子,我希望我没有犯错误(无论如何不要注意错误:D) 但我不能再进一步了。我需要像这样的东西: Criteria criteria = session.createCriteria(Father.class); criteria.createAlias("sonList", "sonListAlias"); criteria.add(Restric
Criteria criteria = session.createCriteria(Father.class);
criteria.createAlias("sonList", "sonListAlias");
criteria.add(Restrictions.in("sonListAlias.toyList.featureList.unisex", unisex));
但是,当然,这不是正确的方法
首先,请不要使用不必要的映射属性。我的意思是
targetEntity=Father.class
,referencedColumnName=“id”,name=“Father”
。不要使用像sonList
这样的名字,只使用sons
Criteria criteria = session.createCriteria(Father.class);
criteria.createAlias("sonList", "son");
criteria.createAlias("son.toyList", "toy");
criteria.createAlias("toy.featureList", "feature");
criteria.add(Restrictions.idEq(1));
criteria.add(Restrictions.eq("feature.unisex", true));
如果您需要急切地获取sonList
,您可以尝试使用setFetchMode(“sonList”,FetchMode.JOIN)
如果你需要
“永远”找一个父亲,只让他的儿子有玩具,有玩具
Feature.unisex=true
您可以尝试使用@Filter
但我认为,如果您在单独的请求中加载sonList
,效果会更好
Criteria criteria = session.createCriteria(Son.class);
criteria.createAlias("father", "father");
criteria.createAlias("toyList", "toy");
criteria.createAlias("toy.featureList", "feature");
criteria.add(Restrictions.eq("father.id", 1));
criteria.add(Restrictions.eq("feature.unisex", true));
谢谢你,伙计,你帮了我很大的忙;你几乎解决了我所有的问题。但可能我在我的帖子里不够清楚。通过你的提问,我得到了一个父亲,只有当一个父亲有一个儿子,有一个玩具,作为特征。中性=真。我真正需要的是“永远”有一个父亲,只让他的儿子们拥有有特点的玩具。不知道我是否清楚:D
Criteria criteria = session.createCriteria(Father.class);
criteria.createAlias("sonList", "son");
criteria.createAlias("son.toyList", "toy");
criteria.createAlias("toy.featureList", "feature");
criteria.add(Restrictions.idEq(1));
criteria.add(Restrictions.eq("feature.unisex", true));
Criteria criteria = session.createCriteria(Son.class);
criteria.createAlias("father", "father");
criteria.createAlias("toyList", "toy");
criteria.createAlias("toy.featureList", "feature");
criteria.add(Restrictions.eq("father.id", 1));
criteria.add(Restrictions.eq("feature.unisex", true));