2017-04-10 90 views
1

如何編寫Hibernate查詢以選擇具有多於兩個值的值?在Hibernate中選擇具有多於兩個值的查詢

metrics = new long[]{1, 2, 3}; 
rprtAutoCustomColum = reportSettingServive.getColumnsMap("1,2,3"); 

有三個columnId的。我想在HashMap

public Map<Long, String> customeCol = new HashMap<>(); 

public HashMap<Long, String> getColumnsMap(String columnIds) { 
    Session session = null; 
    Transaction transaction = null; 
    List<ReportsAutomationCustomColumns> automationCustomColumns = new ArrayList(); 

    SQLQuery query; 
    try { 
     session = sessionFactory.openSession(); 
     transaction = (Transaction) session.beginTransaction(); 
     String hql = "from lxr_reportsauto_customcolumns where column_id=:columnIds"; 
     Query query = session.createQuery(hql); 
     List<ReportsAutomationCustomColumns> list = query.list(); 
     transaction.commit(); 

     list.stream().forEach((ReportsAutomationCustomColumns clist) -> { 
      customeCol.put(clist.getColumnId(), clist.getVariableName()); 
     }); 
     return (HashMap<Long, String>) customeCol; 
    } 
} 

普通SQL選擇將ColumnID和變量名和存儲的樣子:

select column_id,variable_name from lxr_reportsauto_customcolumns 
where column_id in(1,2,3) order by column_id 

但我想在Hibernate中。

回答

1

你需要創建一個你想要的值List,然後把它傳遞給你的查詢,例如:

List<Long> values = new ArrayList<Long>(); 
values.add(1L); 
values.add(2L); 
values.add(3L); 

String hql = "from lxr_reportsauto_customcolumns where column_id in (:columnIds)"; 
Query query = session.createQuery(hql); 
query.setParameterList("columnIds", values); 
+0

嗨雨果,當我試圖運行上面的代碼拋出了以下等式。 ex =(org.hibernate.hql.internal.ast.QuerySyntaxException)org.hibernate.hql.internal.ast.QuerySyntaxException:lxr_reportsauto_customcolumns未映射[來自lxr_reportsauto_customcolumns where column_id in(:columnIds)] –

+0

在HQL中,insted使用表名,您必須使用映射到該表的類名稱。 (所以而不是「lxr_reportsauto_customcolumns」,使用映射到它的類名稱) – 2017-04-10 14:08:09