Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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标准api检索嵌入的或组件_Hibernate_Criteria - Fatal编程技术网

使用Hibernate标准api检索嵌入的或组件

使用Hibernate标准api检索嵌入的或组件,hibernate,criteria,Hibernate,Criteria,我将这个类映射为一个实体,我们称它为Person。此人与地址具有嵌入/组件关系。我在使用返回地址对象的条件时遇到问题。 我试过这个: Criteria.createCriteria(Address.class) 这是行不通的。我想我需要通过实体,但我需要某种投影 Criteria.createCriteria(Person.class).<<what goes here???>> Criteria.createCriteria(Person.class)。 建议?组

我将这个类映射为一个实体,我们称它为Person。此人与地址具有嵌入/组件关系。我在使用返回地址对象的条件时遇到问题。 我试过这个:

Criteria.createCriteria(Address.class)
这是行不通的。我想我需要通过实体,但我需要某种投影

Criteria.createCriteria(Person.class).<<what goes here???>>
Criteria.createCriteria(Person.class)。

建议?

组件的寿命由其所有者控制;它们不被视为协会。因此,您无法从查询中单独检索组件。但是,您可以在条件中使用它

假设您的“Address”类映射为“Person”中的“Address”,您可以执行以下操作:

Criteria.createCriteria(Person.class)
 .add(Restrictions.eq("address.street", street));

这就是在hibernate中检索或引用嵌入式对象属性的方法

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
                Parent.class,"parent");
criteria.createAlias("embeddedObjectFieldName", "parent.embeddedObjectFieldName");

criteria.setProjection(Projections.projectionList()
                .add(Projections.groupProperty("parent.propertyOne"))
                .add(Projections.max("embeddedObjectFieldName.embeddedobjectproperty")));

以上希望澄清

好的,但是我怎么能做HQL并直接检索地址呢?为什么这不适用于查询?因为HQL具有CriteriaAPI所不具备的功能。现在,如果您真的想不惜任何代价单独返回您的地址,您可以为基于个人的条件创建一个投影列表,该列表将包含地址的每个属性(而不是其他属性),并将
aliastobeansulttransformer
应用于结果。但这是一个很大的头痛,并没有什么表现出来;我会选择FullPerson,并在java代码中提取地址(如果您需要的话)。或者使用HQL。