[英]Can we Get same return type , if we select only one column or more than one column in hibernate?
I made One Class for executing hibernate select operations my code is working fine but i just need some help 我为执行休眠选择操作设置了一个类,我的代码可以正常工作,但我只需要一些帮助
I am passing hibernate select query from some other class to get the result if my select query contains more than one column than I call the method getListbylimit(String query,int limit) its returns List but when my select query column contains only one than it gives exception java.lang.String cannot be cast to [Ljava.lang.Object;
如果我的选择查询包含多个列而不是我调用方法getListbylimit(String query,int limit)的返回列表,但我的选择查询列仅包含一个以上的列,则我从其他类传递休眠选择查询以获取结果给出异常java.lang.String不能
[Ljava.lang.Object;
为[Ljava.lang.Object;
for that I made second method List getListForSingleColumn(String query) to get the result for single column 为此,我做了第二个方法List getListForSingleColumn(String query)以获取单列的结果
is there any way to write method for this so that I can call only one method. 有什么方法可以为此编写方法,以便我只能调用一个方法。 Rather my select query contain one column or more than one columns.
而是我的选择查询包含一列或多于一列。
can I get return type List<Object[]>
if I select only one column instead of List<String>
so that I can use only one method for select operation 如果我只选择一列而不是
List<String>
那么我可以得到返回类型List<Object[]>
,这样我只能使用一种方法进行选择操作
Here is my code 这是我的代码
public class ContentDomain {
Session session;
public List<Object[]> getListbylimit(String query,int limit){
session = HibernateUtil.getSessionFactory().getCurrentSession();
/* session = HibernateUtil.getSessionFactory().openSession();
*/
List<Object[]> ls_ob = new ArrayList<Object[]>();
Transaction tx = null;
try {
tx = session.beginTransaction();
Query q = session.createQuery(query);
q.setMaxResults(limit);
ls_ob = (List<Object[]>)q.list();
}catch (HibernateException ex) {
if (tx != null) {
System.out.println("Exception in getList method " + ex);
tx.rollback();
ex.printStackTrace();
}
System.out.println("Exception getList tx open" + ex);
} finally {
session.close();
}
return ls_ob;
}
public List<String> getListForSingleColumn(String query){
session = HibernateUtil.getSessionFactory().getCurrentSession();
/* session = HibernateUtil.getSessionFactory().openSession();*/
List<String> ls_ob = new ArrayList<String>();
Transaction tx = null;
try {
tx = session.beginTransaction();
Query q = session.createQuery(query);
ls_ob = q.list();
}catch (HibernateException ex) {
if (tx != null) {
System.out.println("Exception in getList method " + ex);
tx.rollback();
ex.printStackTrace();
}
System.out.println("Exception getList tx open" + ex);
} finally {
session.close();
}
return ls_ob;
}
}
如果您使用本机查询(session.createSQLQuery(“ yournnativequery)),则始终会获得带有.list()的Object []列表...那么,很容易执行一个私有解析方法来处理这两个输出。
You can replace ls_ob = (List<Object[]>)q.list();
您可以替换
ls_ob = (List<Object[]>)q.list();
with: 与:
List<Object> result = q.list();
if (!result.isEmpty() && !(result.get(0) instanceof Object[])) {
ls_ob = result.stream().map(o -> new Object[] {o}).collect(Collectors.toList());
} else {
ls_osb = (List) result;
}
Basically, transform the single column query results manually. 基本上,手动转换单列查询结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.