简体   繁体   English

如果在休眠状态下仅选择一列或多于一列,是否可以得到相同的返回类型?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM