论坛首页 Java企业应用论坛

用JAVA范型模拟EJB3的EntityManager的find方法

浏览 2998 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-25  

 如果用过EJB3的人,肯定也知道EJB3有一个EntityManager的类,如下代码

@Stateless
@Remote({TestRemote.class})
@RemoteBinding(jndiBinding="TestSessionBeanRemote")
@Local({TestLocal.class})
@LocalBinding(jndiBinding="TestSessionBeanLocal")
public class TestSessionBean implements TestRemote, TestLocal
{
    @PersistenceContext(unitName="test")
    private EntityManager entityManager;
 
    public void test()
    {
    }
}

 

 

   以我的理解,这个EntityManager就是EJB3进行实体Bean持久化相关的操作类,它有着EJB3进行持久化操作的所有方法,如查找实体find方法, 实体更新或插入merge方法, 实体移除remove方法,还有就是创建HQL查询的createQuery方法等等等等。

  其中find方法用得很多,其中find方法的api定义为

<T> T
find(Class<T> entityClass, Object primaryKey)
          Find by primary key.

  它的作用是,用primary key查找实体Bean,你传一个实体Bean的Class和它的primary key进去,然后马上可以得到这个实体Bean类,多方便,不用超超类Object进行返回,不用进行Case强转,方便,也不容易出错。

  但实体Bean都是自己写的,众多不同的实体Bean都有自己的类,怎么才能让这个find能够共用呢?我们可以看到它出现了<T> T之类的,那么,这个T倒底是什么呢?它就是范型了。关于JAVA范型,大家可以参考我在此篇文章之前发布的另外一篇文章“JAVA范型攻略篇”,是一篇从网上转载下来的文章,写得挺详细的,有很多例码,大家可以去看一下。

  那么现在我们就照着EntityManager find方法的API定义,写一个测试吧.

   

public <T> T find(Class<T> entityClass, Object primaryKey)
    {

        //下面我只是简单地用影射模拟返回
        Object object = Class.forName(entityClass.getName()).newInstance();

        //中间还有一堆用影射设值的,这里我就不详谈了,大家有空多看看JAVA影射方面的知识吧

        return (T) object;
    }

 

OK,大功告成

   发表时间:2008-10-25  
说句实在话,完全不知所云。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics