簡體   English   中英

休眠多對多標准投影

[英]Hibernate Many-to-Many Criteria Projection

編輯>我處於死胡同...所以我可以繼續尋找主要原因。.請告訴我如何為具有多個等式限制的多對多關系建立簡單標准,例如,如何在下面顯示的示例中讓說英語和德語的人...

我的情況是這樣的,我有兩個班級的人和語言,並且有一個,.m關系。.我正在使用一個標准進行搜索-獲取所有以前說話的人。 英文和德文

@Entity
public class Person implements Serializable {
    private int id;
           ...........
    private Set<Languages> languages = new HashSet<Languages>();
       ...............
    @ManyToMany
    @JoinTable(name = "link_person_languages")
    public Set<Languages> getLanguages() {
       return languages;
    }
}

@Entity
public class Languages implements Serializable {
    private int id;
    private String name;
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    @Column(nullable = false, length = 40, unique = true)
    public String getName() {
        return name;
    }

標准

    Criteria crit = session.createCriteria(Person.class);
    crit.setCacheable(true);
    ProjectionList projList = Projections.projectionList();
    projList.add(Projections.property("languages"));
    c = enumMap.get(attr);
    if (c.isChanged()) {
       Criteria crit2 = crit.createCriteria("languages");
       Object[] o = (Object[]) c.getAnswer();
       Conjunction con = Restrictions.conjunction();
       for (int j = 0; j < o.length; j++) {
              Criterion tmp = Restrictions.eq("id", ((Languages)o[j]).getId());
              con.add(tmp);
       }
       crit2.add(con);

    }
    crit.setProjection(projList);
    retList = crit.list();

有趣的是,如果我僅將其設置為一種語言,則會得到正確的人員列表,但是對於一種以上的語言,我將一無所獲,我會重新檢查自己的基礎並設置一個人專門說兩種語言。 但是,最重要的是,Object []在Set語言應該放置的地方的投影結果是NULL值……

請幫助tnx

您使用非常古老的JDBC樣式(JDBC是非常老人們用來訪問DB的東西)將是這樣的:

SELECT * FROM PERSON WHERE LANGUAGE_ID = 1 AND LANGUAGE_ID = 2

(僅是示例,並不完全是SQL)

而且,如果你運行該SQL它永遠不會返回一個單行(很傷心......),因為與LANGUAGE_ID = 1 AND LANGUAGE_ID = 2表中沒有任何

我真的不知道解決您的問題的最佳方法(休眠不是我最強的技能),但是在您的情況下(如果語言數量不是那么大),我會選擇2個(或3個或一個循環)然后使用簡單的Set in代碼加入。 不是最好的解決方案...如果有人展示出更好的方法,我會很高興

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM