前进:从EJB 2.1到EJB 3.0(3)_技术

来源:百度文库 编辑:神马文学网 时间:2024/05/01 01:39:25
相比之下,对应于EJB 2.1实体bean类的EJB 3.0实体Bean类是一个纯旧式Java对象(POJO),并且非常简单(请看例3)。此bean类的EJB 3.0版本使用了元数据注释@Entity,而EJB 2.1部署描述符ejb-jar.xml文件中用元素符指定的查找方法,在EJB 3.0 Bean类中,则使用@NamedQueries和@NamedQuery注释来指定;ejb-jar.xml文件中用元素符指定的CMR关系,在EJB 3.0 Bean类中,则用元数据注释来指定;另外,主要的关键字段通过@Id注释来指定。表1中列出了一些EJB 3.0的元数据注释。
例3:BookCatalogBean.java
import javax.persistence.Entity;
import javax.persistence.NamedQuery;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.OneToMany;
@Entity
@NamedQuery(name="findByTitle", queryString =
"SELECT DISTINCT OBJECT(obj) FROM BookCatalog obj WHERE obj.title = ?1")
public class BookCatalogBean
{
public BookCatalogBean(){}
public BookCatalogBean(String title)
{
this.title=title;
}
private String title;
private String author;
private String publisher;
@Id
@Column(name="title", primaryKey="true")
public String getTitle(){return title;}
public void setTitle(){this.title=title;}
public void setAuthor(String author){this.author=author;}
public String getAuthor(){return author;}
public void setPublisher(String publisher)
{
this.publisher=publisher;
}
public String getPublisher(){return publisher;}
private java.util.Collection<Edition>editions;
@OneToMany
public void setEditions(java.util.Collection editions)
{
this.editions=editions;
}
public java.util.Collection getEditions(){return editions;}
}
表1:EJB 3.0常用元数据注释
注释 说明 注释元素
@Entity 注明一个实体bean类。
@Table 注明实体bean表。如果未指定@Table,表名与EJB名相同。 name, schema
@Id 注明一个主要关键属性或字段。
@Transient 注明一个非持久性属性或字段。
@Column 为一个持久性实体bean属性注明一个映射栏。 Name、primaryKey、nullable、length。默认栏名为属性或字段名。
@NamedQueries 注明一组命名查询。
@NamedQuery 注明一个命名查询或与查找方法相关的查询。 name, queryString
@OneToMany 注明一个一对多联系。 Cascade
@OneToOne 注明一个一对一联系。 Cascade
@ManyToMany 注明一个多对多联系。 Cascade
@ManyToOne 注明一个多对一联系。 Cascade
EJB 2.1 bean类中的查找方法findByTitle(),在EJB 3.0中则使用相应的@namedQuery注释;EJB 2.1实体bean中的CMR关系,在EJB 3.0实体bean中则使用@OnetoMany注释。注释@Id注明了标识符属性标题,注释@Column指定了与标识符属性标题对应的数据库栏。如果一个持久性实体bean属性未用@Column注明,那EJB服务器会假定栏名与实体bean属性名相同。而瞬态实体bean属性通常用@Transient来注明。