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

本文深入探讨了EJB3中的EntityManager类及其find方法的应用。通过示例代码解释了如何使用EntityManager进行实体Bean的持久化操作,并介绍了find方法的API定义及其实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 如果用过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,大功告成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值