技术开发 频道

使用EJB3 Java 持久化API

【IT168 技术文档】
动态查询 vs. 命名查询

  你可以使用动态查询或者命名查询。一个命名查询和实体存储在一起,并且可以在程序中重复使用。

  为了创建一个动态查询,使用entity manager接口的createQuery方法,如下:

Query query = em.createQuery(
"select e from Employee e where e.empNo > ?1");
query.setParameter(1,100);
return query.getResultList();


  如果想要使用命名查询来进行这个查询,在实体类中使用NamedQuery标注,如下:

@Entity
@NamedQuery(name="findAllEmployee",
query="select e from Employee e where e.empNo > ?1")
public abstract class Employee implements Serializable {
}


  为了执行一个命名查询,首先使用EntityManager接口的createNamedQuery方法来创建一个Query实例,如下:

query = em.createNamedQuery(" findAllEmployee");
query.setParameter(1,100);
return query.getResultList();


  命名参数

  你可以在EJBQL中使用命名参数来代替位置参数,例如,你可以使用如下方法来改写上面的查询:

"select e from Employee e where e.empNo > :empNo "


  如果在查询中使用命名参数,你必须使用如下的方法来设置参数:

query = em.createNamedQuery("findAllEmployee");
query.setParameter("empNo",100);
return query.getResultList();


  打包

  EJB3 JPA标准化了POJO的持久化操作。因此,实体并不限于EJB模块,它们可以打包在一个Web模块中,一个ejb-jar模块,EAR级别的类模块,或者一个标准的Jar文件中。你也可以在J2SE环境中使用实体。你必须将一个部署描述符文件(在persistence.xml)打包进去。

<persistence>
<persistence-unit name="onjava">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<jta-data-source>jdbc/OracleDS</jta-data-source>
...
</persistence-unit>
</persistence>


  这个部署描述符确定了持久化提供者,持久化单元以及持久化单元使用的数据源。顾名思义,一个持久化单元就是需要一起管理的一组实体。如果你在一个特定的模块中定义了唯一一个持久化单元,你就不需要在persistence.xml中定义实体类,持久化提供者会自动找到实体类。

0
相关文章