相比之下,对应于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来注明。通告:http://www.qqread.com/java/2006/06/r218128002.html进入讨论组讨论。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- 掌握JAVA的标准 (26次浏览)
- JAVA编译时的常见错误 (25次浏览)
- Ubuntu Linux系统中Java环境的安装配置 (25次浏览)
- 如何在MyEclipse快速搭建Hibernate应用 (15次浏览)
- Nhibernate与代码生成器介绍 (14次浏览)
- 高手为你分析类的设计方法 (12次浏览)
- Java中利用反射实现类的动态加载 (12次浏览)
- JAVA运行时的产间错误 (11次浏览)
- J2SE综合:浅谈java程序发布之 jre 篇 (11次浏览)
- Java敏捷开发技巧之消除代码异味 (10次浏览)



