簡體   English   中英

如果在休眠狀態下僅選擇一列或多於一列,是否可以得到相同的返回類型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM