我有一些实体如下
@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它将返回数据库中的第一个联系人及其第二个详细信息值。
答案 0 :(得分:0)
最后我找到了答案。我在我的方法中使用以下代码:
criteria.setFetchMode("details", FetchMode.SELECT);