
前进:从EJB 2.1到EJB 3.0(3) |
例2:ejb-jar.xml部署描述符 <?xml version="1.0"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <enterprise-beans> <entity> <ejb-name>BookCatalog</ejb-name> <local-home>BookCatalogLocalHome</local-home> <local>BookCatalogLocal</local> <ejb-class>BookCatalogBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>String</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>BookCatalog</abstract-schema-name> <cmp-field> <field-name>title</field-name> </cmp-field> <cmp-field> <field-name>author</field-name> </cmp-field> <cmp-field> <field-name>publisher</field-name> </cmp-field> <query> <query-method> <method-name>findByTitle</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </query-method> <ejb-ql> <![CDATA[SELECT DISTINCT OBJECT(obj) FROM BookCatalog obj WHERE obj.title = ?1 ]]> </ejb-ql> </query> </entity> </enterprise-beans> <relationships> <ejb-relation> <ejb-relation-name>BookCatalog-Editions</ejb-relation-name> <ejb-relationship-role> <ejb-relationship-role-name> BookCatalog-Has-Editions </ejb-relationship-role-name> <multiplicity>One</multiplicity> <relationship-role-source> <ejb-name>BookCatalog</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>editions</cmr-field-name> <cmr-field-type>java.util.Collection</cmr-field-type> </cmr-field> </ejb-relationship-role> <ejb-relationship-role> <ejb-relationship-role-name> Editions-Belong-To-BookCatalog </ejb-relationship-role-name> <multiplicity>One</multiplicity> <cascade-delete /> <relationship-role-source> <ejb-name>Edition</ejb-name> </relationship-role-source> </ejb-relationship-role> </ejb-relation> </relationships> </ejb-jar> 相比之下,对应于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的元数据注释。 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;} } |