ejb是从面向对象的角度考虑问题的,而不是面向数据库考虑问题。想想在你编写程序的时候既要控制逻辑,又要随时考虑数据库的每一个表,每一个字段,表之间的关系...,这其实才是麻烦事

解决方案 »

  1.   

    学习
    顺便说一下,其实DELETE FROM table WHERE col='xx'在执行的时候也是一条一条的删除的
      

  2.   

    one_bird(一鸟):
    是一条一条删的,但是行为发生在数据库内,从客户端发给数据库的指令只有一条,交互一次
    而EJB按我说的方法,可是要发N条,交互N次了
      

  3.   

    QUOTE
    ejb是从面向对象的角度考虑问题的,而不是面向数据库考虑问题。想想在你编写程序的时候既要控制逻辑,又要随时考虑数据库的每一个表,每一个字段,表之间的关系...,这其实才是麻烦事
    UNQUOTE在编程序的时候当然要考虑数据库的结构问题,而且还要考虑优化的问题
      

  4.   

    可以考虑 SESSION + DAO
      

  5.   

    这是在关系型数据库和面向对象的软件接口时的经典问题。解决这种问题的一般方法是加一层影射将数据库纪录影射到对象。但是EJB的entity bean本身已经是直接和数据库纪录相影射,所以不可能在其中再加程序来解决(除非不用entity bean)。以我粗浅之见,可以改变数据库表结构然后通过象Oracle的trigger一类的东西来解决这个问题。比如,增加一张表来存放需要删除的表和它的条件,当一个新纪录插入这张表时,一个insert trigger就会被触发,在这个trigger里实现delete from <table> where <condition>。
      

  6.   

    至于EJB性能这方面的问题其实你根本不用担心,这都是由想IBM,BEA等。这些大公司已经优化好的了,性能一定要比你使用传统的连接方式要好的多。
      

  7.   

    QUOTE
    可以改变数据库表结构然后通过象Oracle的trigger一类的东西来解决这个问题
    UNQUOTEtigger是个很危险的东西,对性能的影响可能十分大
    我觉得只能许在100 rows以下,很少更新的表,例如参数表里面用trigger
    你有没有试过在一个百万行,数十列的表里面定义trigger?update的时候就很难看了
    QUOTE
    至于EJB性能这方面的问题其实你根本不用担心,这都是由想IBM,BEA等。这些大公司已经优化好的了,性能一定要比你使用传统的连接方式要好的多
    UNQUOTE我想EJB CMP的性能再好,在数据库方面也不及store procedure吧
    看过一些文章,说他们一般都会出于性能考虑而用BMP而不是CMP
      

  8.   

    你如果对数据库的操作粒度那么高,而且逻辑又比较复杂的时候,推荐使用BMP而不是CMP!
      

  9.   

    你如果对数据库的操作粒度那么高,而且逻辑又比较复杂的时候,推荐使用BMP而不是CMP!
      

  10.   

    呵呵,上面说的对,cmp一般粗粒度操作,如果你要求很高的话用bmp吧
      

  11.   

    大家都说trigger对性能的影响极大,能具体讲讲吗,在哪些情况下比较明显?谢谢
    当时学SQL的时候,这是个比较好玩的东东,但是据说因为它对性能的影响极大,很多数据库在实施中都避免使用trigger
      

  12.   

    我对trigger不甚了解,但好象可以运行用户程序,这样可以避免速度问题。
      

  13.   

    使用 good CMP implementation,BMP的性能怎么会高于CMP呢?
    BMP还有N+1查询问题。像这种记录删除的问题,我想在finder 和 remove 都是在同一事务中,finder应该是bulk operation,一次网络调用,我想remove也应该是bulk operation,这与直接用SQL性能差不多。