因为CMP不需要编写数据库访问的代码,所以CMP实现的实体Bean比BMP实现的实体Bean的代码少得多。例如本章中讨论的PlayerBean.java源文件要比第5章的代码文件SavingsAccountBean.java小得多。下表比较了两种不同类型实体Bean实现代码的不同:
表6-1两种持久性机制的编码比较
CMP和BMP实现实体Bean的代码比较不同点 CMP BMP企业Bean类定义 抽象 非抽象
数据库访问代码 由工具产生 开发者编码
持久性状态 虚拟持久字段表示 代码中的实例变量表示
持久性字段和关系字段的访问方法 必须 不是必须
findByPrimaryKey方法 由容器处理 开发者编码
其他查找方法 容器根据开发者定义的EJB QL查询自动处理 开发者编码
select方法 容器处理 不需要
ejbCreate方法的返回值 应该为null 必须是主键类
注意:对于两种持久性机制,商业方法和Home方法的实现规则都是一样的

解决方案 »

  1.   

    当表比较小时,使用 CMP!
    表很大时,建议使用 BMP!CMP好慢啊!(JBOSS 当 远程访问 ORACLE时)(10000条记录吧)
    访问本地 的 MYSQL就快的多了!
      

  2.   

    每次 get一次,就 load,store yici
      

  3.   

    单表而且处理记录数比较小建议用CMP!
    但是涉及到多表大记录集操作建议用BMP!
    还有执行批操作时用BMP!
      

  4.   

    多表关联操作使用bmp,灵活,方便自己控制少的话,cmp,省时省力
      

  5.   

    同意,根据表的大小来决定!CMP比较低省事,也安全!!
      

  6.   

    请问各位高手 在实际的使用中CMP和BMP哪一个执行效率更高,另外执行效率和所选用的服务器有关吗?
      

  7.   

    <<精通EJB>>上表许如下:
    1.CMP能够快速开发
    2.CMP可以比BMP有更高的性能(容器相关)
    3.CMP比bmp更难调试
    4.cpm可以对jdbc完全控制
    5.bmp可以保持数据独立性
    5.对应关联,CMP更加容易
      

  8.   

    应该跟表大表小没有关系.表大用CMP可以序列化部分的字段.
    >>CMP好慢啊!(JBOSS 当 远程访问 ORACLE时)(10000条记录吧)
    >>访问本地 的 MYSQL就快的多了!
    remote和homelocal的速度当然不在一个数量级上.一般实体BEAN都通过session bean本地访问.