Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用子查询条件查询Hibernate父/子_Hibernate_Criteria_Hibernate Criteria_Detachedcriteria - Fatal编程技术网

使用子查询条件查询Hibernate父/子

使用子查询条件查询Hibernate父/子,hibernate,criteria,hibernate-criteria,detachedcriteria,Hibernate,Criteria,Hibernate Criteria,Detachedcriteria,编辑:相关:但仍然没有解决方案 我有父母/子女关系。父对象映射一组字符串标记。简化的DDL: CREATE TABLE PARENT ( ID NUMBER(38,0) NOT NULL, {other columns here} CONSTRAINT PK_PARENT PRIMARY KEY ("ID") ) CREATE TABLE TAGS ( PARENT_ID NUMBER(38,0) NOT NULL, NAME VARCHAR

编辑:相关:但仍然没有解决方案

我有父母/子女关系。父对象映射一组字符串标记。简化的DDL:

CREATE TABLE PARENT ( 
  ID        NUMBER(38,0) NOT NULL,
   {other columns here}
  CONSTRAINT PK_PARENT PRIMARY KEY ("ID") 
)

CREATE TABLE TAGS ( 
  PARENT_ID NUMBER(38,0) NOT NULL,
  NAME      VARCHAR2(100) NOT NULL,
  CONSTRAINT CHILD_PARENT_FK FOREIGN KEY ("PARENT_ID") REFERENCES PARENT("ID") 
)
子表具有父表的外键和名为name的varchar

父类将子类映射为一个集合

public class Parent {
  public Set<String> getTags() { return tags; }
  public void setTags(Set<String> tags) { this.tags = tags; }
}
这将查找所有具有与任何“tag1”、“tag2”、“tag3”匹配的标记的父对象

我需要将其转换为基于条件的查询b/c我们对所有其他属性使用条件,我需要找到一种方法来实现这一点:基本上将其转换为一个条件或一个分离的条件,我可以将其用作更大表达式的一部分

我遇到的问题是,大多数类似的示例都有父实体和子实体类,其中子实体类是真正的实体。因此,您可以创建如下条件:

会话.createCriteria(Parent.class,“p”).createCriteria(“标记”)等

如果我尝试这样做,Hibernate会抛出一个映射异常,并抱怨“标记”不是关联。然而,映射是正确的。如果我查询父类型,它会返回集合中的子标记——我就是不知道如何使用条件、子查询、限制、DetachedCriteria等组合进行查询

我很想听到任何建议

<class name="com.example.Parent" table="parent">
  <set name="tags" table="tags" order-by="name asc">
    <key column="parent_id"/>
    <element type="string" column="name"/>
  </set>
</class>
return session.createCriteria(Parent.class)
   .add(Restrictions.sqlRestriction(
     "EXISTS (SELECT 1 FROM tags t WHERE t.parent_id = {alias}.id "+
     "AND t.name in ('tag1', 'tag2', 'tag3') )" ) );