大家多用cmp,因为他开发效率高,在跨平台上体现的更强壮。但是在操作数据库的灵活性上差。
bmp,在操作数据库上的灵活性及自由度更高些,但是需要程序员写的代码量回很大。

解决方案 »

  1.   

    楼上的说的很对。
    CMP是EJB帮你操作数据库,你只要指定执行就可以了。
    而BMP则是要自己来操作数据库,比如查询,更新都有自己来操作。代码量是比较大
    的,而且有时效率也不是很高。CMP对于一般的功能都能实现,但是对于复杂的多表的查询则显得不灵活,很费力。这
    个时候我一般的解决办法就是直接访问数据库而绕过EJB,进行查询。上面是我的一点认识,如果谁对于使用CMP时,遇到的复杂查询有更好的解决办法还请
    拿出来分享一下。
      

  2.   

    bmp和cmp的优缺点主要表现在编程的复杂度上。bmp需要提供你自己的数据访问逻辑,提供实现的方法,来建立bmp实例和数据库之间的持久性联系,即你要用数据库API(JDBC)编程实现数据的操作;而cmp则把数据的访问交给EJB容器代为处理。
        随着EJB的版本从1.0到2.0的变化,bmp的优势已经逐渐丧失。只有在数据关系和数据操作十分复杂的情况下,才采用bmp。然而,EntityBean必须采用容器管理事务(声明性事务),其事务的边界划分、事务的隔离级别都被限定,因此笔者认为若要采用bmp,倒不如采用bean管理事务的SessionBean。
        cmp在简化编码和数据持久方面可以说是十分出色的。但是,在数据的操作和关联关系特别复杂时,在ejb-jar.xml中描述实体间的关系和使用EJB QL语言将是一件比较艰巨的任务,因为你必须对数据间的关系十分清楚。吹毛求疵的说,cmp还不利于数据的跟踪,尤其在有逻辑错误的情况下。
        不过,就bmp和cmp而言,cmp是当仁不让之选。