2016-10-23 4 views
0

で間違った結果、私はDetachedCriteriaを

@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で呼び出すと、その2番目の詳細値。

+0

私はもう一度チェックして、連絡先ではなく詳細に長さを適用します。他の世界では、詳細の数が長さに達するまで連絡先を返します。接触の制限を細部ではなく適用する基準をどのように伝えるべきですか? – SRF

答えて

0

最後に私は答えを見つけました。自分のメソッドに次のコードを使用します:

criteria.setFetchMode("details", FetchMode.SELECT); 
関連する問題