使用子查询条件查询Hibernate父/子
编辑:相关:但仍然没有解决方案 我有父母/子女关系。父对象映射一组字符串标记。简化的DDL:使用子查询条件查询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
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') )" ) );