Hibernate处理同名实体的方法

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

  各家使用的是同一个数据库,各自都创建了Hibernate的实体映射文件,我在整合的过程中发现com.xxx.model.QBtable和com.yyy.model.QBtable重名,并且这样的映射不止一个。开始认为同名但是处于不同的包路径下不应该报错啊??于是拿着错误在网上查了资料,知道了错误的原因篐ibernate在处理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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值