Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在遗留世界中需要Hibernate_Java_Hibernate_Orm - Fatal编程技术网

Java 在遗留世界中需要Hibernate

Java 在遗留世界中需要Hibernate,java,hibernate,orm,Java,Hibernate,Orm,我有几个关于hibernate的问题 在stackoverflow中的许多问题中,有几个人说hibernate不是非常复杂的数据库的好选择。如果我们有非常复杂的数据库,那么hibernate不是正确的选择。它更适合绿地项目,但不适合复杂的遗留数据库 这是真的吗? hibernate还生成查询。 每个项目经理都希望优化查询(hibernate无法生成比sql specialist更优化的查询!)。所以对于大型项目来说,雇佣sql专家并不是问题。sql专家将优化查询(使用解释sql、使用连接…) 我

我有几个关于hibernate的问题

在stackoverflow中的许多问题中,有几个人说hibernate不是非常复杂的数据库的好选择。如果我们有非常复杂的数据库,那么hibernate不是正确的选择。它更适合绿地项目,但不适合复杂的遗留数据库

  • 这是真的吗?
    hibernate还生成查询。 每个项目经理都希望优化查询(hibernate无法生成比sql specialist更优化的查询!)。所以对于大型项目来说,雇佣sql专家并不是问题。sql专家将优化查询(使用解释sql、使用连接…)

  • 我的问题是,为什么一个庞大而昂贵的项目不关心sql优化?
    (你会说你可以写HQL,但正如我在很多帖子中看到的那样,HQL并没有sql强大,很多程序员都会头疼,需要几个小时的调整)(你喜欢你身体中的所有器官都能理想地工作,不是吗?) 另外,二级缓存对hibernate有很大帮助,因为hibernate知道生成大量查询,而不是复杂的联接

  • 我的问题是:一个复杂的数据库真的只被一个系统(例如web站点)修改吗?如果我们谈论的是企业系统,那么可以通过几个过程访问数据库,共享不同的编程语言和平台。
    因此,在这种情况下,二级缓存没有多大帮助

  • hibernate适合什么样的项目? 它是否适用于没有人关心sql的后台项目

  • 当管理员说:请使用memcached进行缓存,并请使用此优化查询而不是您的查询时会发生什么

  • 如果您使用的是oracle数据库,orache具有最高级的sql语法。他们花了大量的时间和金钱在非常强大的语法上。如果不使用这个语法,它有什么用呢

    软件只编写一次(然后进行维护)并使用很长时间。 如果我是一家订购软件的公司,我会说:我将使用该软件几年,我喜欢快速,如果你花1个月的时间用hibernate编写软件,我将再花一个月的时间购买使用IBATIS示例的软件,因为我知道它会在几年内工作得更好
    (当你买一辆车时,你感兴趣的是每公里1千克油的汽车经济性,而不是制造商生产的汽车有多短、多容易!)。因此,作为一个软件消费者,我对您的生产力不感兴趣,只对软件的速度感兴趣。当然,价格也是相关的,但如果我们谈论价格,有更复杂的数学

    当我们真的无法预测系统的某个部分时,我们能称之为工程吗?
    (如果电气工程师不能预测电流,他真的能成为工程师吗)

    请分享你的意见

    问候

  • 不管数据库有多复杂。最重要的问题是应用程序的领域模型有多复杂

  • 查询
    是否从anycol=@anyvalue
    优化的任何表中选择*?我不知道。谁也没有。因为只有一个真正的优化标准——这就是此类查询的性能。使用hibernate或其他ORM可以节省大量时间,然后利用这段时间查找实际较慢的查询。据我所知,Hibernate有一些使用优化查询的方法

  • 第三,你的问题很好。但是,对于“脏数据在任何地方都是好的吗?”这个问题也没有一个答案。严格地说,在锁定之前,从数据库读取的任何数据都是脏的,不管它是如何读取的,也不管它存储在哪里。数据阻塞对性能并没有好处,所以通常您应该在实际数据和性能之间找到折衷点

  • 没有银弹。ORM有很多优点,但只有一种严重的情况不适合它:它是动态结果集,依赖于参数(当不同的参数返回具有不同列集的数据时)。因为对象结构在编译时是静态的(在静态类型语言中),所以ORM在这种情况下帮不了忙

    其他案件都可以解决。实体服务(更改跟踪等)可以关闭,二级缓存可以禁用,优化查询可以使用而不是生成。我不知道如何在Hibernate中完成所有这些事情,但我相信这是可能的


    ORM有一个巨大的优势,它将所有数据访问逻辑集中在可管理的形式中,并将其放在特定的位置。此外,它还支持一些在您自己的数据访问库中实现起来不那么简单和直接的功能,如事务管理(包括嵌套事务等)、标识映射(一行一个对象)、复杂层次结构持久化(如果使用对象和对象层次结构)、乐观锁定等,ORM可以极大地帮助您。

    您的问题可能太广泛了。我可以告诉你我的经历

    我参与了一个采用.NET版本(NHibernate)的项目。从一个表加载一行的简单实现比原始ADO查询慢了近两个数量级。经过多次优化后,我相信他们只把速度降低了一个数量级

    在java中,启动时间可能不是一个重要因素。web服务器在服务器启动时加载java和hibernate,而不是在用户等待桌面应用程序启动时加载

    就我个人而言,我真的不喜欢它。它隐藏了有效管理数据所必需的实现细节。我还没有发现任何现实世界中的应用程序可以通过隐藏数据库细节的数据层的普通实现来执行。 但这对我来说可能是酸葡萄,因为我被迫使用它,并被指责为
    不能给猪贴上足够的口红。

    这对绿色田园工程有好处,但也有好处。