【问题标题】:Wrong result in DetachedCriteriaDetachedCriteria 中的错误结果
【发布时间】:2016-10-23 11:48:50
【问题描述】:

我有一些实体如下

@Entity
public class Contact {
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "contact")
    private Set<ContactDetails> details = new HashSet<>();
}

@Entity
public class ContactDetails {
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
    private Contact contact;

    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "contact_details_values", joinColumn = @JoinColumn(name = "contact_detail_id"))
    @Column(name = "value")
    private Set<String> values = new HashSet<String>();
}

我有一个方法可以选择具有 DetachedCriteria 的联系人范围,如下所示:

public List<Contact> getContactsByRange(int start, int length) {
    DetachedCriteria criteria = DetachedCriteria.forClass(Contact.class);
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    Criteria executableCriteria = criteria.getExecutableCriteria(currentSession);
    executableCriteria.setFirstResult(start);
    executableCriteria.setMaxResults(length);
    return executableCriteria.list();
}

问题是当我用 0 和 10 调用方法时,它将返回数据库中的所有联系人,但是当我用 0 和 1 调用它时,它将返回数据库中的第一个联系人及其第一个详细值,如果我用它调用它1 和 1 它将返回数据库中的第一个联系人及其第二个详细值。

【问题讨论】:

  • 我再次检查它,发现它会将长度应用于详细信息而不是联系人,在其他世界中,它会返回联系人,直到详细信息计数达到长度。我应该如何告诉标准以限制联系方式而不是详细信息。

标签: java hibernate detachedcriteria


【解决方案1】:

我终于找到了答案。我在我的方法中使用以下代码:

criteria.setFetchMode("details", FetchMode.SELECT);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2020-02-16
    相关资源
    最近更新 更多