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)

      新燕郊生活趣之有道

  • 相关阅读:
    C# 动态生成word文档
    C# 利用SharpZipLib生成压缩包
    C# 程序异常关闭时的捕获
    轻松学习UML之用例图,时序图
    轻松学习UML之类图,状态图
    C# 一款属于自己的音乐播放器
    C# MessageBox自动关闭
    C# 用户控件之温度计
    Html富文本编辑器
    java工作流引擎证照库类型的流程设计 实现方案与演示案例
  • 原文地址:https://www.cnblogs.com/qumao5736/p/1592998.html
Copyright © 2011-2022 走看看