我必须用where子句编写一个条件查询来匹配first&子集合中的姓氏。两个名称都在不同的行
试过这个,但即使匹配数据存在也不会返回任何内容,可能是因为它试图匹配同一行的两个限制。
char *p = (char*)malloc(sizeof(char) * 100);
int index = 0;
int decoded = ei_decode_string(buff, &index, p);
cout<<"The decoded value is "<<p<<endl;
试过这个并且这会产生异常 org.hibernate.QueryException:重复的关联路径:响应
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())));
任何帮助?
修改
从描述看起来问题并不清楚。这是基本要求:
查询表单类中的所有记录(具有id = firstName AND value = someName1的子响应记录)AND(具有id = lastName AND value = someName2的子响应记录)
我也在使用子查询添加适用于我的解决方案。不确定这是否是最好的方法,但它解决了我的问题
答案 0 :(得分:0)
使用OR进行查询:
Criteria criteria = getCurrentSession().createCriteria(Form.class);
criteria.createAlias("responses", "r");
Junction conditionGroup = Restrictions.disjunction();
conditionGroup.add(Restrictions
.conjunction()
.add(Restrictions.eq("r.id", "firstName"))
.add(Restrictions.eq("r.value", getFirstName())));
conditionGroup.add(Restrictions
.conjunction()
.add(Restrictions.eq("r.id", "lastName"))
.add(Restrictions.eq("r.value", getLastName())));
criteria.add(conditionGroup);
答案 1 :(得分:0)
我能够使用子查询来解决问题。看起来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)));