2017-04-10 96 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