现在的位置: 首页 > 综合 > 正文

JPA 中使用EntityManager操作实体

2013年10月04日 ⁄ 综合 ⁄ 共 1793字 ⁄ 字号 评论关闭

顾名思义,实体管理器EntityManager是
负责管理Entity的对象。对Entity的操作包括添加、删除、修改和查询,都是通过实体管理器来实现的。

3.3.1  依赖注入EntityManager

在EJB容器
中,EntityManager的获得可以通过标注,使用依赖注入来创建EntityManager实例,代码如下所示。

    @PersistenceContext(unitName = "demo")

private EntityManager entityManager;

@PersistenceContex
表示标注的属性entityManager是一个实体管理器EntityManager对象,EJB容器会根据unitName的值来初始化
EntityManager。其中unitName的值为上文中在persistence.xml中配置的<persistence-
unit>中name的值。

虽然这里没有看到new实体管理器
EntityManager的代码,但一旦将该类放置到EJB容器中,容器将会自动依赖注入,初始化该实例。

3.3.2  添加Entity

EntityManager
类中的persist方法可以在数据库中添加一条记录,其声明如下所示。

public void persist(Object entity)

示例代码如下所示。

    CustomerEO customer = new CustomerEO();

    customer.setId(1);

    customer.setName("Sun System");

    customer.setShortName("Sun");

    entityManager.persist(customer);

3.3.3  根据主键查找Entity

EntityManager
类中的find方法可以根据主键的值查找对应的实体。

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


中,entityClass为实体对象,primaryKey为主键的值。例如,查找id为1的实体代码如下所示。

CustomerEO instance = entityManager.find(CustomerEO.class,
new Integer(1));

3.3.4 
更新Entity

EntityManager
类中的merge方法可以将实体更新到数据库中,其声明如下所示。

public <T> T merge(T
entity);

其中,entity为所要更新的实体对象,可以通过find方法先查找出来,然后重新设置值后,最后更新。例如,更新id为1的实体代码
如下所示。

CustomerEO customer =
entityManager.find(CustomerEO.class, new Integer(1));

customer.setName("New Name");

customer.setShortName("New
Short Name");

entityManager.merge(customer);

3.3.5  删除Entity

EntityManager
类中的remove方法可以删除数据库中的一条记录,其声明如下所示。

public void remove(Object entity);

其中,entity为所
要删除的实体对象,可以通过find方法先查找出来,然后删除。例如,删除id为1的实体代码如下所示。

CustomerEO customer =
entityManager.find(CustomerEO.class, new Integer(1));

entityManager. remove
(customer);

3.3.6  执行查询

EntityManager
类中的createQuery方法可以查询数据,并返回查询结果集,其声明如下所示。

public Query createQuery(String
queryString);


中,queryString为查询的SQL语句。例如,查询所有的CustomerEO可以使用以下代码。

String sql = "SELECT c FROM
CustomerEO c";

Query query =
entityManager.createQuery(sql);

List result  =
query.getResultList();

抱歉!评论已关闭.