【发布时间】: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