2013-02-27 111 views
6

से वापसी कैसे प्राप्त करें यहां मेरे कोड को डॉवर्क के लिए नीचे दिया गया है() मैं वापसी विधि प्राप्त करने में सक्षम नहीं हूं इस विधि से वापसी पाने के लिए कोई रास्ता नहीं है और doreturnwork() इस के लिए काम नहीं कर रहा है कृपया मुझे बाहर im यह कोशिश कर लेकिन वहाँ है doreturnwork की तरह कोई विधि कृपया मददdoWork() विधि

sessionFactory.getCurrentSession().doWork( 

      new Work() 
      { 
       public void execute(Connection connection) throws SQLException 
       { 
        String contactQueryCounts = ""; 
        String contactQueryIds = ""; 
        int index = 1; 
        StringBuilder builder = new StringBuilder(); 
        CustomerUser user = (CustomerUser) userService.getLoggedInUser(); 
        String inClause = ""; 
        for (Long id :ids) { 
         builder.append("?,"); 
        } 
        if(builder.length()>0){ 
         inClause = builder.substring(0, builder.length()-1); 
        } 

        if(inClause.length()>0){ 
         contactQueryCounts= "select count(id) from (select *,@num := if(@company_id = company_id, @num + 1, 1) as row_number," + 
         "@company_id := company_id as dummy from salebuild_ctl.company_contact where id in ("+inClause+") " + 
         " order by company_id, date_created asc ) as x where x.row_number <= ?"; 

         contactQueryIds= "select id from (select *,@num := if(@company_id = company_id, @num + 1, 1) as row_number," + 
         "@company_id := company_id as dummy from salebuild_ctl.company_contact where id in ("+inClause+") " + 
         " order by company_id, date_created asc ) as x where x.row_number <= ?"; 
        }else{ 
         contactQueryCounts= "select count(id) from (select *,@num := if(@company_id = company_id, @num + 1, 1) as row_number," + 
         "@company_id := company_id as dummy from salebuild_ctl.company_contact " + 
         " order by company_id, date_created asc ) as x where x.row_number <= ?"; 

         contactQueryIds= "select id from (select *,@num := if(@company_id = company_id, @num + 1, 1) as row_number," + 
         "@company_id := company_id as dummy from salebuild_ctl.company_contact " + 
         " order by company_id, date_created asc ) as x where x.row_number <= ?"; 
        } 

        java.sql.PreparedStatement sCount; 
        java.sql.PreparedStatement sIds; 
        try { 
         sCount = connection.prepareStatement(contactQueryCounts); 
         sIds = connection.prepareStatement(contactQueryIds); 
         for(Long id : ids){ 
          sCount.setLong(index, id); 
          sIds.setLong(index, id); 
          index=index+1; 
         } 
         sCount.setInt(index,user.getAccount().getCurrentSubscription().getNumberofcontactspercompany()); 
         sIds.setInt(index,user.getAccount().getCurrentSubscription().getNumberofcontactspercompany()); 
         ResultSet rs = sCount.executeQuery(); 
         int c = rs.getInt(1); 

         String contactLevelCountsQuery="select c.name,count(a.id) from company_contact a left join " + 
         "title b on a.corporate_title_id=b.id left join title_level c on b.title_level_id=c.id where a.id in" + 
         " ("+sIds.toString()+") and c.name is not null group by c.name"; 

         java.sql.Statement s = connection.createStatement(); 
         ResultSet rsIds = s.executeQuery(contactLevelCountsQuery); 

         SearchService.levelToContactCount.clear(); 

         while (rsIds.next()) { 
          if(rsIds.getString(1) == null){ 
           SearchService.levelToContactCount.put("No Level",rsIds.getInt(2)); 
          }else{ 
           SearchService.levelToContactCount.put(rsIds.getString(1),rsIds.getInt(2)); 
          } 
         } 
        } catch (SQLException e) { 
         e.printStackTrace(); 
        } 
        catch (Exception e) { 
         e.printStackTrace(); 
        } 
       }  
      } 
    ); 

उत्तर

4

एक खाली संग्रह या धारक वस्तु प्रारंभ, और इस संग्रह या Work उदाहरण के अंदर धारक को भरने:

public List<Foo> searchFoos() { 
    final List<Foo> result = new ArrayList<Foo>(); 
    sessionFactory.getCurrentSession().doWork(new Work() { 
     public void execute(Connection connection) throws SQLException { 
      // do some work 
      result.add(foo1); 
      // do some work 
      result.add(foo2); 
     } 
    }); 
    return result; 
} 

या यहां तक ​​कि क्लीनर , कार्य का नामित उप-वर्ग बनाएं:

private static class FooWork implements Work { 
    private Foo result; 

    public void execute(Connection connection) throws SQLException { 
     // do some work 
     result = new Foo(...); 
    } 

    public Foo getResult() { 
     return result; 
    } 
} 

public Foo searchFoo() { 
    FooWork fooWork = new FooWork();   
    sessionFactory.getCurrentSession().doWork(fooWork); 
    return fooWork.getResult(); 
} 
+0

अच्छा स्पष्टीकरण – ronan

0

शायद आप हाइबरनेट में doReturningWork नामक एक अन्य विधि का उपयोग करना चाहते हैं। शायद तुम this blog

+0

मैं वर्णन है कि doReturingWork मेरी संस्करण में काम नहीं कर रहा में उल्लेख किया है। – shitanshu

11

Hibernate4 से देख सकते हैं, आप भी इस प्रकार session.doReturningWork (ReturningWork काम) का उपयोग कर सकते हैं,

ReturningWork<Long> maxReturningWork = new ReturningWork<Long>() { 

       @Override 
       public Long execute(Connection connection) throws SQLException { 
        PreparedStatement preparedStatement = null; 
        ResultSet resultSet = null; 
        try { 
         preparedStatement = connection.prepareStatement("select max(salary) from employee"); 
         resultSet = preparedStatement.executeQuery(); 
         resultSet.next(); 
         return resultSet.getLong(1); 
        }catch (SQLException e) { 
         throw e; 
        } finally { 
         if(preparedStatement != null) { 
          preparedStatement.close(); 
         } 
         if(resultSet != null) { 
          resultSet.close(); 
         } 
        } 

       } 
      }; 
      Long maxRecord = getSession().doReturningWork(maxReturningWork); 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^