实体 Bean 和 CMP

什么是一个实体(Entity) Bean

一个持久对象

通常它是被当成一样"东西",或者会长期存在的

BankAccount

Employee

Order

不仅仅只是数据--状态和行为,与常规对象一样

在数据库中的实体 Bean

一个实体 bean 直接映射到数据库中的一行数据

ID LASTNM MGR DEPT SALARY

... ... ... ... ...

42 "Joe" Smith 0 55000.0

97 "Bob" Jones 42 40000.0

102 "Mary" Chen 987 63000.0

... ... ... ... ...

Employee

id: int

first: string

last: string

Salary: double

Managerld: int

Dpartmentld: int

Entity Bean 和 Persistence

根据规范定义,实体 Bean 一旦被创建后就存在

它们被直接写到数据库中

可以不受任何服务器的宕机影响

Create 方法必需提供足够的信息将 Bean 保存到数据库中

实体 Bean 与 会话 Bean 的区别

实体 Bean

持久对象; 不受服务器宕机影响

有一个主键; 可以被搜索到

可以被共享

必需被显式删除

会话 Bean

不是持久的; 受服务器宕机影响

不可以被搜索

通常一个用户使用一个 bean

过一段非活动期后将被自动回收

Aside: 什么是一个主键?

(一个或多个)域可以唯一地区别一行数据/一个 bean--用来查找和更新数据/对象

在数据/对象的生命周期中是不变的--主键是基于不变的数据

主键通常是生成的而不是基于"活跃"的数据

SSN 显然适合于作为一个主键

就算错误选择的主键不能再被修改

Aside: 什么是一个关系型数据库?

数据库: 一组数据集合可以被检索和查找--一个关系型数据库维持不同行数据间的关系

数据被组织成表格--外键(Foreign Key)用来映射关系、Structured Query Language (SQL) 用来操作数据库

读 (select), 写 (insert, update), 删除 (delete)

同步访问的控制

容器管理同步访问--线程获得对 Bean 的独有访问、即 Bean 的每个方法是 synchronized

警告: 当心死锁!

Bean 本身也是客户!

Client 1 有对 Bean 1 的独有锁

Client 2 有对 Bean 2 的独有锁

Bean 1 必需等待 Client 2 的结束

Bean 2 必需等待 Client 1 的结束

没有任何一方得到锁!

实体 Bean 有主键

主键用来唯一地区别 bean--类似于数据库主键的概念

主键类:必需反映 bean 类的"关键"状态、必需提供 equals(...) 和 hashCode() 方法

主键可能由多个域组成

...
Employee employee
= employeeHome.findByPrimaryKey(new EmployeeKey(42));
...
Create 方法
Home 定义了一个或多个 "create" 方法--在创建后,Bean 必需马上被写到数据库
EmployeeHome method
Employee create(int arg1, String arg2, String arg3)
throws CreateException, RemoteException
EmployeeBean method
public void ejbCreate(int argId, String first, String last)
throws CreateException, RemoteException {
id = argId;
setFirst(first);
setLast(last);
setManagerId(0);
setDepartmentId(0);
}

时间: 2024-10-30 18:48:24

实体 Bean 和 CMP的相关文章

EJB 3.0开发指南之实体Bean

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

eclipse + JBoss 5 + EJB3开发指南(6):编写第一个实体Bean程序

EJB3容器通过EntityManager对象管理实体Bean,该类最主要的功能就是在记录和JavaBean之间进行互 相映射.例如,我们从数据库中查出一条记录,这条记录有field1和field2两个字段,假设有一个 JavaBean,也包含了field1和field2属性.那么EntityManager可以将这条记录中的值映射到JavaBean的 field1和field2属性中.也就是说,在数据库中的一条记录就对应于一个JavaBean的对象实例.下面将给 出一个简单的例子来演示如何来实现

一步一步学EJB3.0(四):实体Bean开发

EJB3.0实体Bean开发是是很简单的,主要就是学习标注的使用, 现在EJB3实体Bean是纯粹的POJO.实际 上这表达了和Hibernate持久化实体对象同样的概念.它们的映射都通过JDK5.0注解来定义(EJB3规范已经 定义了对应的XML描述语法).注解分为两个部分,分别是逻辑映射注解和物理映射注解,通过逻辑映射注解 可以描述对象模型,类之间的关系等等,而物理映射注解则描述了物理的schema,表,列,索引等等. 这些标注都封装在javax.persistence包下,如果是使用Hib

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

在上面一个例子中,实体Bean的属性对应到数据表中的列,都是采用默认的设置.通过Column,你可以为属性指定数据表中的列名. Column的声明如下: @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface Column { String name() default ""; boolean primaryKey() default false; boolean unique() default fal

Struts2.3.28.1升级后action中实体Bean第一个字母小写 第二字母大写

问题描述 Struts2.3.28.1升级后action中实体Bean第一个字母小写 第二字母大写 我将 Struts升级至2.3.28.1后,action中实体Bean第一个字母小写 第二字母大写的情况后台获取值为null如:UserAction中有 private User user; 在User:private String uName; public String getUName() { return uName; } public void setUName(String uName

ssh-为什么这里只能有一个实体bean类,我再加一个就是错的呢?求助大神

问题描述 为什么这里只能有一个实体bean类,我再加一个就是错的呢?求助大神 解决方案 大神们求助啊,这是为什么啊?第二种运行时就会报错 解决方案二: 或许不是用value 解决方案三: 找到原因了,各种百度还是找到问题所在了,class被我弄成老版本的LocalSessionFactoryBean去了,改成这种就OK了class="org.springframework.orm.hibernate4.annotation.AnnotationSessionFactoryBean",算

实体bean(entity)配置,jpa增删改api,JPAsql增删改

1.ORM框架必然发展趋势: jdbc->hibernate(是产品,实现jpa规范)->jpa(是规范,不是产品). ps:运用jpa规范的API进行编程,不对Hiberbate,topLink等orm框架构成威胁. 2.JPA环境搭建[hibernate-distribution-3.6.10.Final] 1.准备lib包2.jar包引入时,千万注意目录不能有中文或者空格 3.开发步骤: 1.先建表,再编写配置文件和bean-(面向过程,传统的数据库建模思想)2.先编写配置文件和bean

WebService远程调用,返回的List中的实体bean为null

问题描述 WebService远程调用,返回的List中的实体bean为null,WebService中的方法执行了,List中有数据,但就是返回时就成空的了.遇到过或者熟悉该问题的朋友麻烦指教指教.谢谢! 解决方案 解决方案二:看你用的wsdl版本支持不支持这种类型了