实际上 Entity Bean 在被 find 后也不会 load 所有的属性的。
我的理解是,建议 batch 取回多个属性的值(在一个 method invocation 中),而不是多次调用 getxxx() 方法。
所以你应该在 entity bean 上定义一个 HashMap getFields(Collection fieldCol)
在这个方法中根据传入的 fieldCol 分别调用 getxxx(),将其结果放入到 HashMap 中。
可以用 reflection 得到一个 generic 的方法,如果想偷懒:
ArrayList fields = new ArrayList(3);
fields.add("ID");
fields.add("COUNTRY");
fields.add("DESC");
HashMap getFields(Collection fieldCol)
{
  HashMap map = new HashMap(fieldCol.size());
  for (Iterator it = fieldCol; it.hasNext();)
  {
      String fName = (String)it.next();
      if(fName.equals("ID"))
        map.put(fName, getID());
      else if (fName.equals("COUNTRY"))
         map.put(fName, getCountry());
      ...
  }
  return map;
}

解决方案 »

  1.   

    早上好,simoncn(早睡早起精神好) ,呵呵!
    你看的也是ejbDesignPattern--genericAttibuteAccess吧!那上面也提到了这个方法,好是好,但hard-coding....,我问的问题主要是想了解一下在这种情况下怎么使用Reflection API,还是非常谢谢你,稍后给分!
      

  2.   


    各位 ejbDesignPattern--genericAttibuteAccess 哪有的下?是电子书吗?如果方便,发一份给我吧,多谢 [email protected]
      

  3.   

    可不可以这样:
    HashMap getFields(Collection fieldCol)
    {
      HashMap map = new HashMap(fieldCol.size());
      for (Iterator it = fieldCol; it.hasNext();)
      {
          String fName = (String)it.next();
          try{
              Method mt=cl.getMethod(fName,null ) ;
              Class parameters[]=mt.getParameterTypes() ;
              Class returntype=Classmt.getReturnType() ;
              Class returnvalue=(returntype)=mt.invoke(cl,parameters) ;
          }catch(Exception e){
              //handler your exception
              .....
          }
          //handler your return value and put in into "map"
          .....
          
          return map ;
          
      }
      return map;
      

  4.   

    不好意思少了一行代码
    HashMap getFields(Collection fieldCol)
    {
      HashMap map = new HashMap(fieldCol.size());
      for (Iterator it = fieldCol; it.hasNext();)
      {
          String fName = (String)it.next();
          try{
              Class cl=this.getClass(); //后来家的.
              Method mt=cl.getMethod(fName,null ) ;
              Class parameters[]=mt.getParameterTypes() ;
              Class returntype=Classmt.getReturnType() ;
              Class returnvalue=(returntype)=mt.invoke(cl,parameters) ;
          }catch(Exception e){
              //handler your exception
              .....
          }
          //handler your return value and put in into "map"
          .....
          
          return map ;
          
      }
      return map;
      

  5.   

    楼上的方法虽然让我开了眼界,可是在performance上未免有些低。
    这个问题在ejb2.0上有了较好的解决,建议去看一看ejb2.0的规范关于cmp部分的。
    主要思想是可以把某几个字段合成一个group来存取。
      

  6.   

    确实,在ejbDesignPattern中确实提到了EJB2.0对该问题的解决,但Anreddy给的就是我想要的,thank you all!
    thank you Anreddy and simoncn!
      

  7.   

    一直很佩服supersonics(落叶狂风)兄台,有空一定看看.
      

  8.   

    你看的也是ejbDesignPattern--genericAttibuteAccess吧!
    --没有时间看这篇文章,我的思想是来自 VAJ 的 AccessBean,它是取回所有的属性在一个方法中。我觉得那些 EJB Design Pattern 有一些可取之处,但更为欣赏的是大家对一个 Pattern 的大讨论,正是百花齐放啊!