本文为原创,如需转载,请注明作者和出处,谢谢!
上一篇:
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是EJB规范的一个重要版本,它极大地简化了EJB的开发模型,引入了大量的注解,使得开发者无需编写大量的XML配置文件就能实现企业级功能。 在EJB3中,主要的组件包括: 1. **实体Bean (Entity Beans)**:代表持久...
- 业务方法如`getCustomerById`、`getCustomerByName`和`getCustomerAll`使用EntityManager执行JPQL(Java Persistence Query Language)查询。 7. **打包与部署** - 完成EJB编写后,需要将其打包成JAR文件部署到...
+ 配置EJB集成开发环境——Eclipse+JBoss Tools插件 + EJB快速上手——HelloWorld入门实例 * 第4课:会话Bean(Session Bean)——发布JNDI服务 + 无状态会话Bean(Stateless Session Bean) + 有状态会话Bean...
3. **Eclipse 或 MyEclipse**:Eclipse是流行的Java集成开发环境,MyEclipse是其针对企业级开发的扩展,包含了更多的功能和插件,特别适合EJB3的开发。 【无状态Bean的开发步骤】 1. **创建EJB工程**:在Eclipse中...
2. **创建EJB项目**:使用IDE如Eclipse或IntelliJ IDEA创建一个新的Maven或Gradle项目,选择Java EE 6或7作为项目框架,并包含EJB模块。 3. **编写EJB**:按照上述的EJB3特性,编写bean类,添加必要的注解。 4. **...
- 讲解如何使用命名参数执行JPQL查询。 - **位置参数查询** - 介绍如何使用位置参数执行JPQL查询。 - **Date参数** - 解释如何在JPQL查询中处理日期类型参数。 - **一个JPQL查询例子** - 通过具体示例演示如何...
- **持久化实体管理器ENTITYMANAGER**: 细致讲解ENTITYMANAGER的各种操作,如查询、添加、更新、删除实体,以及执行JPQL和SQL操作。 **5.4 关系/对象映射** 探讨实体Bean之间的各种关系映射,包括一对多、多对一、...
6. **查询语言(Java Persistence Query Language, JPQL)**:类似于SQL,JPQL用于在EJB3.0中的实体Bean上执行查询,支持复杂的检索和操作。 7. **实体生命周期回调(Lifecycle Callbacks)**:开发者可以定义一些...
- **命名参数查询**:使用命名参数执行 JPQL 查询。 - **位置参数查询**:使用索引位置参数执行 JPQL 查询。 - **JPQL 语言**:深入讲解 JPQL 语法,包括大小写敏感性、命名查询等高级特性。 以上是 EJB 3.0 ...
- **查询语言**: EJB 3.0 引入了 EJB-QL 和 JPA 的 JPQL,支持更为丰富的查询表达式,包括 JOIN、GROUP BY、HAVING 等 SQL 特性。 **5. 拦截器** - **拦截器**: EJB 3.0 支持在方法调用前后执行拦截器,用于处理...
使用JPQL(Java Persistence Query Language)来执行查询。 **3.7.8 执行SQL操作createNativeQuery()** 执行原生SQL语句,适用于复杂的查询需求。 **3.7.9 刷新实体refresh()** 强制从数据库中重新加载实体数据...
至于文件名“04_传智播客EJB3.0_把jboss集成进eclipse”,这个可能是某个教学资源或教程,说明了如何将EJB 3.0项目集成到Eclipse IDE,并部署到JBoss应用服务器上。在实际开发中,IDE集成和服务器选择是重要步骤,...
5. **查询语言**:EJB3.0引入了JPQL(Java Persistence Query Language),这是一种面向对象的查询语言,类似于SQL,但用于操作持久化对象。 【图书馆管理系统的核心组件】 在图书馆管理系统中,EJB3.0通常会用于...