gpt4 book ai didi

java - Hibernate 标准对子集合有多重限制

转载 作者:行者123 更新时间:2023-11-30 07:26:41 34 4
gpt4 key购买 nike

我必须编写一个带有 where 子句的条件查询来匹配子集合中的名字和姓氏。两个名字位于不同行

尝试过此操作,但即使存在匹配数据,也不会返回任何内容,可能是因为它试图匹配同一行上的两个限制。

Criteria criteria = getCurrentSession().createCriteria(Form.class);
criteria.createAlias("responses", "r");
criteria.add(Restrictions
.conjunction()
.add(Restrictions.eq("r.id", "firstName"))
.add(Restrictions.eq("r.value", getFirstName())));
criteria.add(Restrictions
.conjunction()
.add(Restrictions.eq("r.id", "lastName"))
.add(Restrictions.eq("r.value", getLastName())));

尝试了这个,这给出了一个异常org.hibernate.QueryException:重复的关联路径:响应

Criteria criteria = getCurrentSession().createCriteria(Form.class);
criteria.createAlias("responses", "r1");
criteria.createAlias("responses", "r2");

criteria.add(Restrictions
.conjunction()
.add(Restrictions.eq("r1.id", "firstName"))
.add(Restrictions.eq("r1.value", getFirstName())));
criteria.add(Restrictions
.conjunction()
.add(Restrictions.eq("r2.id", "lastName"))
.add(Restrictions.eq("r2.value", getLastName())));

有什么帮助吗?

编辑

从描述来看,问题并不清楚。这是基本要求:

查询表单类中具有(id=firstName AND value=someName1 的子响应记录)和(id=lastName AND value=someName2 的子响应记录)的所有记录

我还使用子查询添加了对我有用的解决方案。不确定这是否是最好的方法,但它解决了我的问题

最佳答案

我能够使用子查询来解决问题。看起来 hibernate 不支持同一子记录上的多个联接。

Criteria criteria = getCurrentSession().createCriteria(Form.class);             
DetachedCriteria subQuery1 = DetachedCriteria.forClass(Response.class);
subQuery1.add(Restrictions.and(
Restrictions.eq("id", "firstName").add(
Restrictions.eq("value", getFirstName())));
subQuery1.setProjection(Projections.property("formId"));

DetachedCriteria subQuery2 = DetachedCriteria.forClass(Response.class);
subQuery2.add(Restrictions.and(
Restrictions.eq("id", "lastName").add(
Restrictions.eq("value", getLastName())));
subQuery2.setProjection(Projections.property("formId"));
criteria.add(Restrictions.and(Subqueries.propertyIn("id", subQuery1),
Subqueries.propertyIn("id", subQuery2)));

关于java - Hibernate 标准对子集合有多重限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729575/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com