`
seara
  • 浏览: 648824 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

eclipse + JBoss 5 + EJB3开发指南(12):使用命名查询执行JPQL

阅读更多
本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇:eclipse + JBoss 5 + EJB3开发指南(11):实体Bean的连接策略(JOINED Strategy)

在EJB3中可以使用EntityManager对象的createQuery方法来执行JPQL(类似于Hibernate中的HQL),这非常简单。但使用createQuery方法处理JPQL时,在每次执行JPQL的过程中系统都需要对JPQL进行分析,这在一定程度上降低了系统运行时的性能。为此,EJB3提供了命名查询的概念。命名查询有些类型于数据库中的存储过程,在提交的过程中就已经被编译处理了。因此,在执行效率上要高一些。
我们可以使用@NamedQuery注释来定义命名查询。这个注释可以放在任何一个实体Bean的上方。但为了便于管理,最好放在相关的实体Bean的上方。如下面的代码所示:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->packageentity;

importjava.util.Collection;
importjavax.persistence.CascadeType;
importjavax.persistence.Entity;
importjavax.persistence.FetchType;
importjavax.persistence.GeneratedValue;
importjavax.persistence.GenerationType;
importjavax.persistence.Id;
importjavax.persistence.JoinColumn;
importjavax.persistence.JoinTable;
importjavax.persistence.ManyToMany;
importjavax.persistence.NamedQuery;
importjavax.persistence.OneToMany;
importjavax.persistence.OneToOne;
importjavax.persistence.PrimaryKeyJoinColumn;
importjavax.persistence.Table;

@Entity
@Table(name
="t_customers")
@NamedQuery(name
="MyQuery",query="selectcfromCustomercwhereid=:id")
publicclassCustomer
{
privateintid;
privateStringname;
privateRefereereferee;
privateCollection<Order>orders;
privateCollection<Address>addresses;

@OneToOne(cascade
=CascadeType.ALL)
@PrimaryKeyJoinColumn
publicRefereegetReferee()
{
returnreferee;
}

publicvoidsetReferee(Refereereferee)
{
this.referee=referee;
}

@ManyToMany(cascade
=CascadeType.PERSIST,fetch=FetchType.LAZY)
@JoinTable(name
="t_customers_addresses",
joinColumns
=@JoinColumn(name="customer_id",referencedColumnName="id"),
inverseJoinColumns
=@JoinColumn(name="address_id",referencedColumnName="id"))
publicCollection<Address>getAddresses()
{
returnaddresses;
}

publicvoidsetAddresses(Collection<Address>addresses)
{
this.addresses=addresses;
}

@OneToMany(mappedBy
="customer",cascade=CascadeType.ALL)
publicCollection<Order>getOrders()
{
returnorders;
}

publicvoidsetOrders(Collection<Order>orders)
{
this.orders=orders;
}

@Id
@GeneratedValue(strategy
=GenerationType.IDENTITY)
publicintgetId()
{
returnid;
}

publicvoidsetId(intid)
{
this.id=id;
}

publicStringgetName()
{
returnname;
}

publicvoidsetName(Stringname)
{
this.name=name;
}
}

代码中的命名查询使用了命名参数。我们可以使用下面的代码来执行该JPQL:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->privateCustomerqueryCustomer(intid)
{
return(Customer)em.createNamedQuery("MyQuery").setParameter("id", 23)
.getSingleResult();
}

在Session Bean中调用queryCustomer就可以通过命名查询获得相应的Customer对象了。

下一篇:eclipse + JBoss 5 + EJB3开发指南(13):在Servlet中访问应用程序管制EntityManager对象

国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

分享到:
评论

相关推荐

    EJB3+JBOSS5+JPA整合

    EJB3是EJB规范的一个重要版本,它极大地简化了EJB的开发模型,引入了大量的注解,使得开发者无需编写大量的XML配置文件就能实现企业级功能。 在EJB3中,主要的组件包括: 1. **实体Bean (Entity Beans)**:代表持久...

    Eclipse开发EJB3

    - 业务方法如`getCustomerById`、`getCustomerByName`和`getCustomerAll`使用EntityManager执行JPQL(Java Persistence Query Language)查询。 7. **打包与部署** - 完成EJB编写后,需要将其打包成JAR文件部署到...

    《Java高手真经:Java Web高级开发技术》读书笔记模板.pptx

    + 配置EJB集成开发环境——Eclipse+JBoss Tools插件 + EJB快速上手——HelloWorld入门实例 * 第4课:会话Bean(Session Bean)——发布JNDI服务 + 无状态会话Bean(Stateless Session Bean) + 有状态会话Bean...

    EJB3 在eclipse下的开发

    3. **Eclipse 或 MyEclipse**:Eclipse是流行的Java集成开发环境,MyEclipse是其针对企业级开发的扩展,包含了更多的功能和插件,特别适合EJB3的开发。 【无状态Bean的开发步骤】 1. **创建EJB工程**:在Eclipse中...

    EJB3应用实例

    2. **创建EJB项目**:使用IDE如Eclipse或IntelliJ IDEA创建一个新的Maven或Gradle项目,选择Java EE 6或7作为项目框架,并包含EJB模块。 3. **编写EJB**:按照上述的EJB3特性,编写bean类,添加必要的注解。 4. **...

    EJB3实例教程破解版

    - 讲解如何使用命名参数执行JPQL查询。 - **位置参数查询** - 介绍如何使用位置参数执行JPQL查询。 - **Date参数** - 解释如何在JPQL查询中处理日期类型参数。 - **一个JPQL查询例子** - 通过具体示例演示如何...

    ejb3·0入门经典教程

    - **持久化实体管理器ENTITYMANAGER**: 细致讲解ENTITYMANAGER的各种操作,如查询、添加、更新、删除实体,以及执行JPQL和SQL操作。 **5.4 关系/对象映射** 探讨实体Bean之间的各种关系映射,包括一对多、多对一、...

    EJB3.0实例教程(pdf)

    6. **查询语言(Java Persistence Query Language, JPQL)**:类似于SQL,JPQL用于在EJB3.0中的实体Bean上执行查询,支持复杂的检索和操作。 7. **实体生命周期回调(Lifecycle Callbacks)**:开发者可以定义一些...

    EJB 3.0 入门教程 黎活明

    - **命名参数查询**:使用命名参数执行 JPQL 查询。 - **位置参数查询**:使用索引位置参数执行 JPQL 查询。 - **JPQL 语言**:深入讲解 JPQL 语法,包括大小写敏感性、命名查询等高级特性。 以上是 EJB 3.0 ...

    EJB3.0学习心得

    - **查询语言**: EJB 3.0 引入了 EJB-QL 和 JPA 的 JPQL,支持更为丰富的查询表达式,包括 JOIN、GROUP BY、HAVING 等 SQL 特性。 **5. 拦截器** - **拦截器**: EJB 3.0 支持在方法调用前后执行拦截器,用于处理...

    EJB3.0中文文档

    使用JPQL(Java Persistence Query Language)来执行查询。 **3.7.8 执行SQL操作createNativeQuery()** 执行原生SQL语句,适用于复杂的查询需求。 **3.7.9 刷新实体refresh()** 强制从数据库中重新加载实体数据...

    ejb3.0 开发

    至于文件名“04_传智播客EJB3.0_把jboss集成进eclipse”,这个可能是某个教学资源或教程,说明了如何将EJB 3.0项目集成到Eclipse IDE,并部署到JBoss应用服务器上。在实际开发中,IDE集成和服务器选择是重要步骤,...

    图书馆管理系统代码(Ejb3.0)

    5. **查询语言**:EJB3.0引入了JPQL(Java Persistence Query Language),这是一种面向对象的查询语言,类似于SQL,但用于操作持久化对象。 【图书馆管理系统的核心组件】 在图书馆管理系统中,EJB3.0通常会用于...

Global site tag (gtag.js) - Google Analytics