gpt4 book ai didi

hibernate - 即使提取了其子项,如何在不重复的情况下检索实体?

转载 作者:行者123 更新时间:2023-12-04 06:50:31 28 4
gpt4 key购买 nike

我有一个名为 Property 的对象。在此相关的多重关注。

<class name="Property"
table="T_PROPERTY">
<id name="propertyId" type="integer" column="PRTY_ID">
<generator class="native" />
</id>

<property name="propertyName" column="PRTY_NAME" type="string"/>
<many-to-one name="propertyType" class="com.mmm.ehspreg2.entity.property.PropertyType" column="PRTY_TYP_ID" />
<property name="active" column="ACTV" type="boolean"/>

<set name="propertyConcern">
<key column="PRTY_ID"/>
<one-to-many class="PropertyConcern"/>
</set>
</class>

<class name="PropertyConcern"
table="T_CONCERN">
<id name="prtyCrnId" type="integer" column="PRTY_CRN_ID">
<generator class="native" />
</id>

<many-to-one name="concern"
class="com.mmm.ehspreg2.entity.property.Concern" column="CRN_ID" />
<many-to-one name="property"
class="com.mmm.ehspreg2.entity.property.Property" column="PRTY_ID" />

</class>

所以我需要唯一属性对象的列表。下面是我的代码:
Criteria criteria = getPersManager().getCurrentSession()
.createCriteria(Property.class).createAlias("propertyType",
"type").createCriteria("propertyConcern",
"propertyConcern", CriteriaSpecification.LEFT_JOIN)
.createCriteria("propertyConcern.concern",
CriteriaSpecification.LEFT_JOIN).setFetchMode("type",
FetchMode.JOIN).setFetchMode("propertyConcern",
FetchMode.JOIN).setFetchMode("propertyConcern.concern",
FetchMode.JOIN).setResultTransformer(
CriteriaSpecification.ROOT_ENTITY);

属性(property)列表,如果我遍历属性(property),我应该得到其他对象。我能够获取其他对象,但 Property 对象正在重复。我应该如何避免它?

最佳答案

代替
setResultTransformer(CriteriaSpecification.ROOT_ENTITY)setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
那行!

编辑:阅读OP的评论后

In this how do i bring propertyConcern==null property on top in the order?



其实Oracle确实有 NULLS FIRST/LAST的概念。 (主题名称:排序)

但是,我 Criteria API 不支持此功能(原因可能是只有 Oracle(或少数 RDBMS)支持此功能,但不确定)。

好的,无论 Criterai API 不支持的原因是什么,您都可以执行以下技巧来使其工作....(假设您的数据库支持 Nulls First/Last)
Order o = new Order(${propertyName}, true) {
@Override
public String toSqlString(Criteria criteria, org.hibernate.criterion.CriteriaQuery criteriaQuery)
throws HibernateException {
return super.toSqlString(criteria, criteriaQuery) + " NULLS FIRST"; /* or LAST*/
}

};

其中 ${propertyName} 表示您要排序的属性的名称

然后
criteria.addOrder(o);

关于hibernate - 即使提取了其子项,如何在不重复的情况下检索实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3187650/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com