2012-11-26 130 views
0

我有一個標籤類是這樣的:HQL查詢

public class Tag { 

    private Long id; 

    private String title; 
    private Set<Document> documents = new HashSet<Document>(); 

    public Tag(){} 

//getter and setter... 

} 

和A類文檔通過一些標籤clasified對象

public class Document { 

    private Long id; 

    private String title; 
    private Int numberPages; 
    private Set<Tag> tags = new HashSet<Tag>(); 

    public Document(){} 

//getter and setter... 

} 

現在,我想獲得的是單據, 10頁maximun,他們有標籤的「短」或「散文」

我想是這樣的:

int nPages = 10; 
Query query = session.createQuery("from Document where nPages <= :numberPages and (<<short>> OR <<essay>>); 
query.setInteger("numberPages", nPages); 

標籤列表可能是可變的。我想區分何時必須是所有標籤(標籤之間的「AND」)或任何標籤是否足夠(標籤之間的「OR」)

如何構建sql語句?

回答

2

我覺得你HQL應該如下:

Query query = session.createQuery(
      "from Document d join d.tags t "+ 
      " where d.nPages <= :numberPages and "+ 
       " t.title in (:titles) "; 
    List<String> titles = new ArrayList<String>(); 
    titles.add("short"); 
    titles.add("essay"); 
    query.setParameter("numberPages", nPages); 
    query.setParameterList("titles", titles); 
+0

這將返回只有標記物「短」和「散文」或具有「短」或「散文」任何對象? –

+0

@Franb任何短或「或」短文或兩者的對象。你需要「和」嗎? –

+0

真的不是,只有「和」纔是好奇心。我認爲用OR就足夠了,但我想我會按發生順序排列。例如,具有這兩個標籤的對象比其他只有一個標籤的對象「更重要」。我猜Hibernate不能返回一個有序列表。 –