我有以下父/子示例
public class Parent implements Serializable{
private Integer parentId;
private Set<Child> childs = new HashSet<Child>();
public Parent(){}
// getters and setters
}
public class Child implements Serializable{
private Integer childId;
private Parent parent;
public Child(){}
// getters and setters
}
XML文件:
<hibernate-mapping package="com.dto">
<class name="Parent" table="Parent">
<id name="idParent" type="int" column="idParent">
<generator class="increment"/>
</id>
<set name="childs" table="Childs" inverse="true" cascade="save-update">
<key column="idParent" not-null="true"/>
<one-to-many class="Child"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping package="com.dto">
<class name="Child" table="Childs">
<id name="idChild" type="int" column="idChild">
<generator class="increment"/>
</id>
<many-to-one name="parent" class="Parent" column="idParent" not-null="true"/>
</class>
</hibernate-mapping>
问题是如果我运行此查询:
ArrayList<Parent> parents = (ArrayList<Parent>) session.createQuery("from Parent p").list();
我得到了这个:[父],这是我想要的结果,但是如果我运行这个查询:
ArrayList<Parent> parents = (ArrayList<Parent>) session.createQuery("from Parent p
inner join p.childs c
where parent.someField = someValue and
c.someField = someValue").list();
我得到了这个:[[父母,孩子]]我希望得到这样的结果:[父母]
我怎样才能得到我想要的结果?
答案 0 :(得分:0)
使用select子句(在JPQL,BTW中是必需的):
select p from Parent p ...
另外,请不要假设查询返回ArrayList。它返回一个List,这就是你需要知道的全部内容:
List<Parent> parents = session.createQuery("...").list();
最后,由于您似乎从Hibernate开始并且没有维护一个已有10年历史的代码库,因此您应该使用注释而不是XML来映射您的实体。它们是标准的,更安全,更简洁。当Java处于版本4时,XML很酷。它现在是版本8.