如果想在程序中手动控制事务或想与别的系统如corba集成,就用bmp,一般推荐用cmp,因为ejb2.0对cmp有了全新的定义,新一代的ejbql语言已经成为标准,这种基于对象的类似于sql语句的语言,很可能最后在ejb中取代sql,它支持排序,合计等多种计算。cmp对事务自行控制,字段也自行控制,而且加入了关系的概念,可以使cmp之间支持关系操作,什么简单。但缺点是不太通用,配置麻烦,针对不同的容器要不同的配置,移植差,不象bmp那样移植好,配置简单,但效率肯定是cmp远远高于bmp。
为了增加可移植性就用CMP.....另外CMP也省事,省去你需要了解的好多东西...
你不想使用预设的Insert,Update,Delete之类的代码,而是要使用自己的控制代码,就可以使用BMP,在ejbCreate,ejbStore等方法里面自己撰写代码.
另外现在EJB2.0中CMP不支持排序若想在SQL语句中排序就要用BMP
最好的解决方案是用CMP,然后用BMP继承CMP。用BMP来做CMP不能做的事,比如like查询。两者兼顾。既可以有CMP的可移植性。又可以有BMP的灵活性。不过遵守一个原则,能有CMP的就要用CMP。呵呵!
我一般都用CMP,只有在表结构比较复杂、SQL语句复杂的情况下使用BMP。
当你想灵活的使用ejb时,而对可移制性要求不高时,使用bmp。否则使用cmp。
CMP周期短,简单,但有依赖性, CMP比较适合单一的表影射操作。比如你可以把一个客户表对应做成一个CMP(其实.NET里的CMP是对存储过程的映射)BMP比较适合一组负责业务的操作。比如你可以把一个财务三级报表做成一个BMP。