关于用实体bean实现跨越多个表或视图的业务实体的疑问

05-07-04 redlly
一般来说,一个实体bean表示的是一个表中的某条记录(我的理解),在bang的《EJB/JBOSS实战开发教程》是如此描述:“,CMP可以看成是内存中的数据表。只要对CMP实现数据操作,就相当于对数据表实现操作。见下图,CMP 通过JNDI 和数据表建立Mapping 映射后,所有对CMP的操作,都会自动映射到数据表的操作,这种映射是自动的,由容器实现的,所以,使用CMP对数据表实现增删改查,基本无需写SQL语句。”

我的疑问是:当存在一个业务实体User,如图:

它由基本用户信息、多个用户电话、多条用户地址、多种用户证件组成,即一个用户对应多条明细。这种一对多的关系由一个实体bean实现还是多个实体bean实现?如果用一个实现,怎么写sql?

另一个疑问:当存在一个员工实体,如图:

一个员工必定是一个用户,是一对一的关系。一个员工信息包括用户表的信息和员工表的信息,这种相当于一个视图的业务实体怎么用实体bean实现由一个实体bean实现还是多个实体bean实现?如果用一个实现,怎么写sql?实体bean可以对视图进行操作吗?

希望能阐述一下具体实现,谢谢!

         

2
banq
2005-07-04 08:30
这是典型的一对多案例,在你的 员工信息表中,主键应该是信息ID,是由序列号产生器产生的,我有一个Sequence.jar包你可以使用,具体用法见我的Jdon框架应用JdonNews。

在员工信息表中还有一个键,指向用户信息的主键,这个键是可重复的。这样两个表之间建立1对多关系。

在实体Bean设计中,选择一个实体Bean,右键按Add,选择CMR,实体之间的关系,可从员工信息表拉向用户信息表,点击CMR线,将两个表中的相同Key名建立拉线即可,这两个key就是刚才说的数据表1对多关系。

redlly
2005-07-12 21:46
另外的一个疑问,如果使用dao,每个表对应一个VO、一个DAO,每个DAO中有对应的增删改查的方法,这些方法都是最基本的方法,那么我在加入一个用户或修改一个用户时要同时对多个表进行操作,这是一个事务。我想问的是:这样一个事务是写在一个BO的AddUser或UpdateUser方法中(这样在一个方法中进行的多表操作可以保证事务性),还是调用每个表对应的DAO方法中的add、update方法(这样好像不能保证事务性,因为每个DAO中的方法都是一个单独的表操作,应该是原子级的操作)?

banq
2005-07-13 08:23
既然使用EJB了,只使用DAO实现批量读操作,增删改查就不必了,使用CMP实现吧。

猜你喜欢