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