当前位置: 首页 > news >正文

广东网站建设专业公司哪家好珠海市建设工程交易网

广东网站建设专业公司哪家好,珠海市建设工程交易网,网站建设比较好,国外有哪几家做充电桩网站非一致性访存系统在使用ORM工具时#xff0c;每个人都承认数据库设计和实体到表映射的重要性。 这些方面引起了很多关注#xff0c;而诸如获取策略之类的事情可能只是推迟了。 我认为#xff0c;不应将实体获取策略与实体映射设计分开#xff0c;因为除非经过适当设计每个人都承认数据库设计和实体到表映射的重要性。 这些方面引起了很多关注而诸如获取策略之类的事情可能只是推迟了。 我认为不应将实体获取策略与实体映射设计分开因为除非经过适当设计否则它可能会影响整体应用程序性能。 在Hibernate和JPA如此流行之前设计每个查询需要付出大量的努力因为您必须明确地选择要从中选择的所有联接以及所有您感兴趣的列。足够DBA可以优化运行缓慢的查询。 在JPA时代JPA-QL或HQL查询正在获取实体及其一些关联关系。 这使开发变得轻松因为它使我们免于手动选择我们感兴趣的所有表字段的麻烦有时会自动生成联接或其他查询来满足我们的需求。 这是一把双刃剑。 一方面您可以更快地交付功能但如果自动生成SQL查询效率不高则应用程序的整体性能可能会受到严重影响。 那么实体获取策略是什么 当JPA加载实体时它也会同时加载所有EAGER或“ join fetch”关联。 只要打开持久性上下文在LAZY关联中导航也将通过其他已执行的查询来获取那些关联。 默认情况下将更容易地自动获取JPA ManyToOne和OneToOne批注而将OneToMany和ManyToMany关系视为LAZY。 这是默认的策略并且Hibernate不会神奇地优化您的对象检索它只会执行所指示的操作。 尽管小型项目不需要全面的实体获取计划但中大型应用程序永远都不应忽略它。 从一开始就计划获取策略并在整个开发周期中进行调整这并不是“过早的优化”这只是任何ORM设计的自然组成部分。 缺省的获取策略是您通过JPA映射定义的策略而手动连接获取是使用JPA-QL查询时的策略。 我能给您的最佳建议是赞成手动获取策略在使用获取操作符的JPA-QL查询中定义。 虽然总是急切地获取某些ManyToOne或OneToOne关联但在大多数情况下并不是每个获取操作都需要它们。 对于儿童协会将它们标记为LAZY并仅在需要时才“联接提取”它们总是比较安全的因为它们可以轻松生成带有不需要联接的大型SQL结果集。 将大多数关联定义为LAZY要求我们使用“ join fetch” JPA-QL运算符并且仅检索满足给定请求所需的关联。 如果您忘记正确地“联接提取”则在浏览惰性关联时持久性上下文将代表您运行查询这可能会产生“ N 1”问题或者可能是通过简单联接检索到的其他SQL查询首先。 作为一个具体的例子让我们从下图开始 产品实体关联映射为 ManyToOne(fetch FetchType.EAGER) JoinColumn(name company_id, nullable false) private Company company;OneToOne(fetch FetchType.LAZY, cascade CascadeType.ALL, mappedBy product, optional false) private WarehouseProductInfo warehouseProductInfo;ManyToOne(fetch FetchType.LAZY) JoinColumn(name importer_id) private Importer importer;OneToMany(fetch FetchType.LAZY, cascade CascadeType.ALL, mappedBy product, orphanRemoval true) OrderBy(index) private SetImage images new LinkedHashSetImage(); 大多数关联都标记为LAZY因为每次加载产品时都不需要获取所有关联。 仅在显示库存信息时才需要仓库。 导入程序仅在某些显示中使用我们将在必要时提取它。 图像是惰性的因为并非所有视图都需要显示这些图像。 因为我们所有的观点都需要它所以只有公司热切地求助并且在我们的应用程序中始终必须在给定公司的背景下考虑产品。 即使ManyToOne默认使用EAGER fetch选项最好还是显式地设置默认的获取策略这会使代码更具自描述性。 用例1通过id加载产品将生成以下SQL SELECT product0_.id AS id1_7_1_,product0_.code AS code2_7_1_,product0_.company_id AS company_4_7_1_,product0_.importer_id AS importer5_7_1_,product0_.name AS name3_7_1_,company1_.id AS id1_1_0_,company1_.name AS name2_1_0_ FROM product product0_ INNER JOIN company company1_ ON product0_.company_id company1_.id WHERE product0_.id ? 每次我们通过实体管理器加载时都会使用默认的获取策略这意味着公司将与我们选择的产品一起获取。 用例2通过JPA-QL查询选择产品绕过Persistence Context一级缓存 entityManager.createQuery(select p from Product p where p.id :productId, Product.class) .setParameter(productId, productId) .getSingleResult(); 这将执行以下SQL查询 SELECT product0_.id AS id1_7_,product0_.code AS code2_7_,product0_.company_id AS company_4_7_,product0_.importer_id AS importer5_7_,product0_.name AS name3_7_ FROM product product0_ WHERE product0_.id ? 因此使用JPA-QL会覆盖默认的提取策略但是如果我们要浏览惰性关联它仍然使我们容易受到攻击。 如果Persistence Context关闭则在访问惰性关系时会收到LazyInitializationException但如果未关闭则会生成其他选择查询这可能会影响应用程序性能。 用例3选择具有相关仓库和进口商关联的产品列表 entityManager.createQuery(select p from Product p inner join fetch p.warehouseProductInfo inner join fetch p.importer, Product.class) .getResultList(); 这将生成以下SQL SELECT product0_.id AS id1_7_0_,warehousep1_.id AS id1_11_1_,importer2_.id AS id1_3_2_,product0_.code AS code2_7_0_,product0_.company_id AS company_4_7_0_,product0_.importer_id AS importer5_7_0_,product0_.name AS name3_7_0_,warehousep1_.quantity AS quantity2_11_1_,importer2_.name AS name2_3_2_ FROM product product0_ INNER JOIN warehouseproductinfo warehousep1_ ON product0_.id warehousep1_.id INNER JOIN importer importer2_ ON product0_.importer_id importer2_.id 在这里您可以看到JPA-QL显式提取策略将覆盖默认策略。 由于我们尚未指定与Company的“ join fetch”因此EAGER关联将被忽略。 用例4在显式加入获取产品的同时选择一系列图像即使所选实体不是我们要覆盖其策略的实体也将覆盖默认策略 entityManager.createQuery(select i from Image i inner join fetch i.product p where p.id :productId, Image.class) .setParameter(productId, productId) .getResultList(); 这将生成以下SQL SELECT image0_.id AS id1_2_0_,product1_.id AS id1_7_1_,image0_.index AS index2_2_0_,image0_.name AS name3_2_0_,image0_.product_id AS product_4_2_0_,product1_.code AS code2_7_1_,product1_.company_id AS company_4_7_1_,product1_.importer_id AS importer5_7_1_,product1_.name AS name3_7_1_ FROM image image0_ INNER JOIN product product1_ ON image0_.product_id product1_.id WHERE product1_.id ? 我还需要添加一件事这与WarehouseProductInfo的oneToOne关系有关。 对于可选的OnetoOne关联将忽略LAZY属性因为Hiberante必须知道它是否必须使用null或代理来填充您的Entity。 在我们的示例中将其强制性是有意义的因为每种产品无论如何都位于仓库中。 在其他情况下您可以简单地使关联成为单向的并仅保留控制链接的部分外键所在的部分。 代码可在GitHub上获得 。 参考 Hibernate Facts从JCG合作伙伴 Vlad Mihalcea的Vlad Mihalcea博客博客中获取策略的重要性 。 翻译自: https://www.javacodegeeks.com/2013/11/hibernate-facts-the-importance-of-fetch-strategy.html非一致性访存系统
http://www.huolong8.cn/news/265106/

相关文章:

  • wordpress怎样显示子类目郑州外语网站建站优化
  • 做跨国婚恋网站赚钱吗鸿邑科技 网站建设
  • 做地方网站论坛赚钱网站建设需要注意的
  • php网站开发实例报告wordpress连接微博专业版v4.1
  • 苏州关键词优化平台北京朝阳建站优化
  • 做游戏代练的网站易班网站的建设内容
  • 国外做油画的网站网站图片搜索技术哪里可以做
  • 网站策划培训北京网站开发企业
  • 网站做得好的公司wordpress文字居中
  • 网站怎么添加导航栏网站建设需求分析的实施
  • 公司网站建立的建议百度网页电脑版入口
  • 怎么建立一个网站能够与讯飞云对话大企业门户网站建设
  • .net 手机网站源码下载深圳杰恩创意设计有限公司网站
  • 怎么做vip电影网站超市的网站怎么建设
  • 南安网站定制网站建设比较好的公司
  • 沈阳专业网站制作公司长春二道网站建设
  • 某些网站dns解析失败wordpress mediawiki
  • 新乡网站建设哪家正规wordpress 对象存储插件
  • 做企业评价的有哪些网站自己做的网站上传
  • 做原创品牌服饰的网站ppt图片素材
  • 鑫瀚通网站建设射阳网站开发
  • 郑州营销网站建设设计深圳高端网站定制公司
  • 三五互联网站后台营销型企业网站分析与诊断
  • 网站视频播放代码杭州市做网站的公司
  • 长清网站建设价格捡个将军做男友啥网站能看
  • 长沙 公司网站动漫做h免费网站有哪些
  • 网络优化的内容包括哪些sem和seo是什么
  • 工信部网站备案被删除wordpress好用插件
  • 做网站用什么开发好厦门网站seo哪家好
  • 网站上传百度多久收录嵌入式软件开发技术