EJB 3.0开发指南之使用实体Bean

在上面一个例子中,实体Bean的属性对应到数据表中的列,都是采用默认的设置。通过Column,你可以为属性指定数据表中的列名。

Column的声明如下:

@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
public @interface Column {
String name() default "";
boolean primaryKey() default false;
boolean unique() default false;
boolean nullable() default true;
boolean insertable() default true;
boolean updatable() default true;
String columnDefinition() default "";
String secondaryTable() default "";
int length() default 255;
int precision() default 0;
int scale() default 0;
boolean specified() default true; // For internal use only
}

EntityManager 是用来处理实体Bean的辅助类。它可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,通过查询语言来查询实体Bean。

下面是EntityManager接口的声明:

package javax.ejb;
import java.sql.Connection;
/**
* 用来和持久化上下文交互的接口
*/
public interface EntityManager {
/**
* 使实体bean受持久化管理
* @param entity
*/
public void create(Object entity);

/**
* 将给定的实体Bean的状态和持久化上下文结合。类似数据库的更新操作。
* @param entity
* @return 被结合的实体实例
*/
public <T> T merge(T entity);
/**
* 删除实例
* @param entity
*/
public void remove(Object entity);
/**
* 根据主键查找.
* @param entityName
* @param primaryKey
* @return 查询实例
*/
public Object find(String entityName, Object primaryKey);
/**
* 根据主键查找
* @param primaryKey
* @return 查询实例
*/
public <T> T find(Class<T> entityClass, Object primaryKey);
/**
* 持久化上下文与底层数据库的同步
*/
public void flush();
/**
* 执行一个EJBQL查询
* @param ejbqlString EJBQL查询语句
* @return the new query instance
*/
public Query createQuery(String ejbqlString);
/**
* 执行命名的查询
* @param name 预定义的查询名称
* @return 查询实例
*/
public Query createNamedQuery(String name);
/**
* 执行一个本地SQL查询语句
* @param sqlString 本地查询语句
* @return 返回查询实例
*/
public Query createNativeQuery(String sqlString);
/**
* 更新到数据库中
* @param entity
*/
public void refresh(Object entity);
/**
* 持久化上下文中删除实体
* @param entity
*/
public void evict(Object entity);
/**
* 检查当前上下文中是否包含此实体
* context.
* @param entity
* @return
*/
public boolean contains(Object entity);
}

时间: 2024-09-13 11:23:30

EJB 3.0开发指南之使用实体Bean的相关文章

EJB 3.0开发指南之消息驱动Bean

消息驱动Bean的业务接口已经被定义,对于使用JMS来说那就是MessageListener接口,这个接口定义了OnMessage方法. 实现类必须使用MessageDriven注释.可以实现也可以不实现setMessageDrivenContext和ejbRemove方法. 在JBOSS中,通过ConnectionConfig指定消息的队列的JNDI名称. @ConnectionConfig(destinationType = javax.jms.Queue.class, destinatio

EJB 3.0开发指南之实体Bean

在EJB3.0中开发实体Bean非常简单,你可以象开发一般的java bean一样编程,只需做少量的注释.一个实体bean不需要实现Home接口或者Remote.Local接口. 实体Bean通过EntityManager产生.查找.和持久层结合.从持久层收回等操作. JBoss的EJB3.0架构在Hibernate之上. 注释: @Entity:如果你要建立一个实体Bean的类,你必须在类上加上这个注释,用来告诉容器这个类是实体Bean.这个Bean的主键由@Id指定. 这个注释的声明如下:

EJB 3.0开发指南之实体Bean的继承

在EJB3.0中,实体Bean可以实现继承关系. 比如有个Person的实体bean,它有姓名和性别两个属性. 上帝和女娲造人的时候,造出两种人:Man和Woman.Man和Woman都是实体Bean,而且他们都继承Person. 单一表策略就是副实体和子实体的数据都存放在一张表中,同时指定一列用来区别这些实体. 如: @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = Discrim

EJB 3.0开发指南之依赖值对象

在上面的章节我们提到,实体bean的属性可以是java基本对象.Date等,事实上,实体Bean的属性也可以是其他的java对象.这些Java对象不能直接从持久化上下文中读取,它依赖于主实体bean.不象关联实体Bean,在EJB3.0中不支持依赖值对象的集合. 依赖值对象不支持继承,这将在EJB3.1中在讨论. 依赖类需要使用◎DependentObject来注释: @Target({TYPE}) @Retention(RUNTIME) public @interface DependentO

EJB 3.0开发指南之多表映射

在前面的例子中,我们每一个实体Bean只映射到数据库中的一张表上.事实上,一个实体Bean可以映射到多张表上.在一些需要字典表的项目上会经常用到,象以前我做过的项目,使用到很多国标规定的数据表.在我们下面这个例子中,性别作为一个字典表存在,学生这个实体将映射到学生信息表.性别表这两个表. 从表可以使用@SecondaryTable来注释: @Target({TYPE}) @Retention(RUNTIME) public @interface SecondaryTable { String n

EJB 3.0开发指南之组合主键

在前面的所有的实体Bean的例子中,我们所用的主键都是Id,而且都是由容器自动生成的. 如: @Id(generate = GeneratorType.AUTO) public int getId() { return id; } 事实上,主键可以是任意的java基本类型.或者是基本类型的包装类,如Integer.String类型.或者是带字段或属性的主键类.注意,如果这样使用主键,你需要将主键的注释中的生成规则改为NONE.就是由程序生成主键值. 主键类必须实现hashCode和equals方

EJB 3.0开发指南之多表映射_JSP编程

在前面的例子中,我们每一个实体Bean只映射到数据库中的一张表上.事实上,一个实体Bean可以映射到多张表上.在一些需要字典表的项目上会经常用到,象以前我做过的项目,使用到很多国标规定的数据表.在我们下面这个例子中,性别作为一个字典表存在,学生这个实体将映射到学生信息表.性别表这两个表. 从表可以使用@SecondaryTable来注释: @Target({TYPE}) @Retention(RUNTIME) public @interface SecondaryTable { String n

EJB 3.0开发指南之多对多和一对一

在前面的例子中,我们演示了一对多和多对一的例子,在本章将演示多对多和一对一的关系. 学生和老师就是多对多的关系.一个学生有多个老师,一个老师教多个学生. 学生和档案就是一对一的关系(不知道国外的学生有没有档案?). 为了实现多对多的关系,数据库中需要关联表,用以在两个实体间建立关联.JBoss可以自动生成关联表,你也可以@AssociationTable来指定关联表的信息. 如: @ManyToMany(cascade = {CascadeType.CREATE, CascadeType.MER

EJB 3.0开发指南之定时服务

在EJB2.1的规范中需要实现ejbTimeout方法,当然还有ejbPassivate.ejbRemove等方法.在EJB3.0中,只有你想用它们的时候,你才必须创建它们,否则不必实现. 这个例子主要有5个文件,这个例子的Bean是一个无状态会话Bean: NewsTimer.java:业务接口. NewsTimer.java:业务实现类.将来我们开发的EJB也都是这样命名(在接口名上加上Bean). Client.java:测试EJB的客户端类. jndi.properties:jndi属性