zoukankan      html  css  js  c++  java
  • Hibernate处理同名实体的方法

      题外:无奈公司当前进行的项目是多家公司合作开发,说实话这个项目的管理方很烂,烂到不负责任,连各家公司开发的规范化都不做统一,做为我们只拿到其中很小一部分的模块自然也发挥不了决定性和建设性的建议和解决方案,只能顺从别家公司,这种项目只看别人眼色,做的心里很不爽!可是老板只管挣钱根本不会管你项目里面到底会遇到哪些问题,他只管要结果!这不最大的问题出现了:

      各家使用的是同一个数据库,各自都创建了Hibernate的实体映射文件,我在整合的过程中发现com.xxx.model.QBtable和com.yyy.model.QBtable重名,并且这样的映射不止一个。开始认为同名但是处于不同的包路径下不应该报错啊??于是拿着错误在网上查了资料,知道了错误的原因:Hibernate在处理HQL时,会先将其翻译成一条数据库能够识别的sql语句,翻译的依据当然是实体与数据库表之间的映射关系。那么针对我的配置,Hibernate根据HQL查询中的QBtable实体就不会唯一定位实体了。

      幸好Hibernate提供了一个auto-import属性,当你不指定具体的实体时(只指定from QBtable),它会自动找到唯一的名为User的实体映射,将其补全为com.xxx.model.QBtable。这个属性加的位置是*.hbm.xml文件中<hibernate-mapping auto-import="false">,之后还要在HQL查询中使用实体的完整限定名,如from com.xxx.model.QBtable 或 from com.yyy.model.QBtable,这样就可以了。

      总结,

      当你的系统中确实要需要两个同名的实体时,我们需要做两件事:
      1. 将这两个同名的实体的映射文件都要设置为auto-import="false";
      2. 所有关于这两个实体的HQL,都需要明确指定其全限定名(如com.yyy.model.QBtable)

      新燕郊生活趣之有道

  • 相关阅读:
    HTML目录
    Java目录
    高级Swing——列表
    Java Web目录
    mongodb目录
    MySQL目录
    基于C++11的线程池
    数据库架构的演变
    cocos2dx-3.0(14)------SpriteBatchNode与SpriteFrameCache加快渲染
    cocos2d-x 托付模式的巧妙运用——附源代码(一)
  • 原文地址:https://www.cnblogs.com/qumao5736/p/1592998.html
Copyright © 2011-2022 走看看