當hibernate返回一個類屬性的對象數組時

來源:互聯網
上載者:User

今天看到一段使用hibernate的代碼,為了統計每個部門的資料,還得先查出所有合格資料,然後遍曆集合,把資料中的部門全取出來,然後再重新遍曆該集合,與剛才取出的部門名稱作比對,名稱相同的計數器加1,最後就可以得到每個部門的資料統計了。

 

      看到這裡不由覺得麻煩,要是使用sql語句的話,直接寫個“select  部門名稱,count(*) from 表  where  條件” 不就行了。 平時使用hibernate時,寫hql語句一般都習慣直接從 from開始寫,返回類的集合。其實使用hibernate時,也可以從select開始寫的, “select  部門名稱,count(*) from 類  where  條件”,結果是返回 屬性的 對象數組。 這裡返回 部門名稱 和 數量的數組集合。

 

       String hql = “select name, count(*) from Dept”;

          List list  = getHibernateTemplate().find(hql);

 

這裡返回的是一個list,到這一步時忘了該怎麼取出list中的資料了,上網查了一下,只要把list中的object對象 強轉為 object[]就可以了。

 

           Object[] obj = (Object[])list;

          

   然後   String name = obj[0];

            long count = obj[1];

   再把這個資料放到一個hashmap返回頁面,這樣就能取到每個部門的資料了。

 

   剛才在 Object[] obj = (Object[])list; 卡住了,按照使用hibernate的慣性思維 ,要定義一個類去把list裡面的資料取出來,  於是我定義了

 

public class Test {
 private String name ;
 private int count;
 
 public  Test(){}

 public String[] getName() {
  return name;
 }

 public void setName(String[] name) {
  this.name = name;
 }

 public int getCount() {
  return count;
 }

 public void setCount(int count) {
  this.count = count;
 };
 
}

去取取不出來,debug看了一下list的值,

 

看到count是Long類型的,還以為是 private int count出錯呢。

 

於是修改成

 

     public class Test {
 private String[] name ;
 private Long count;
 
 public  Test(){}

 public String[] getName() {
  return name;
 }

 public void setName(String[] name) {
  this.name = name;
 }

 public Long getCount() {
  return count;
 }

 public void setCount(Long count) {
  this.count = count;
 };
 
}

    還是報類型轉換出錯,經過朋友提醒才發現,返回的就是個數組,用Object[]去取就行。

 

 

    忘了寫一下,網上提到,返回對象數組的list,不能用Iterator去遍曆了,但是我試了一下

   while(it.hasNext()){
   Object[] b = (Object[])it.next() ;
   String name = (String)b[0];
   long count = (Long)b[1];
   System.out.println(name+"  "+count);
  }

   這段代碼還是能執行。不知道他說的是哪個?

 

   進公司8個多月了,基本沒寫代碼,雜事做了很多,技術上反而退步了,把基本的core java知識都忘了,這樣可不行,要重新開始 ,把基礎打牢才能往上走。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.