[英]Can we Get same return type , if we select only one column or more than one column in hibernate?
我為執行休眠選擇操作設置了一個類,我的代碼可以正常工作,但我只需要一些幫助
如果我的選擇查詢包含多個列而不是我調用方法getListbylimit(String query,int limit)的返回列表,但我的選擇查詢列僅包含一個以上的列,則我從其他類傳遞休眠選擇查詢以獲取結果給出異常java.lang.String不能[Ljava.lang.Object;
為[Ljava.lang.Object;
為此,我做了第二個方法List getListForSingleColumn(String query)以獲取單列的結果
有什么方法可以為此編寫方法,以便我只能調用一個方法。 而是我的選擇查詢包含一列或多於一列。
如果我只選擇一列而不是List<String>
那么我可以得到返回類型List<Object[]>
,這樣我只能使用一種方法進行選擇操作
這是我的代碼
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 []列表...那么,很容易執行一個私有解析方法來處理這兩個輸出。
您可以替換ls_ob = (List<Object[]>)q.list();
與:
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;
}
基本上,手動轉換單列查詢結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.