hibernate完成特殊使命(多库查询)

今天开发遇到了链接多个库来进行查询,也就是查询多个库中的表然后从中获取所需数据那么我们的配置应该怎么写才能完成该改需求那请看

下面讲解:

  其实很简单道理和链接一个库去查询道理是一样的只不过配置略有不同

  例子:

  比如说在 jdbc:mysql://192.168.91.211:3306/wanbu?characterEncoding=gbk  改urlmysql服务下有两个库一个wanbu 一个ultrax

  你如果想查询wanbu库中的user表和cltar中的mesage表并且是要两表联查那么sql应该是这样的

  select  u.uname,m.title from wanbu.user u inner join ultrax.mesage m on u.uid=m.uid; 必须要加数据库名称去调用

那么要想在hql中用其实是一样的只不过要在对应表(不在默认库下的表)entity.hbm.xml 中加上catalog="ultrax   表所属的库名

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!--

MappingfileautogeneratedbyMyEclipsePersistenceTools

-->

<hibernate-mapping>

<classname="com.dascom.Wanbuadmin.userManage.pojo.message"table="pre_wanbu_walk_mesage"catalog="ultrax">

<idname="walkdataId"type="java.lang.Integer">

<columnname="walkdataID"/>

<generatorclass="native"/>

        </id>

 这是告诉我们凡是于这张表有关的操作都会到该库下执行,其实到sql那边就是会自动给表加上库名在去调用。如果不写的话默认都会到你链接url时写的库中去找表并且操作,本例中自然会去wanbu这个库中找了,如果写上则就会去对应的库中找表了,脖子疼了,在写写使用该方法应注意且必须做到的事,  1. 要操作的多个库必须位于同一个mysql服务下也就是说必须在同一个url下 2。 url中的用户名和密码必须对这些个库都有操作权限。  如果不满足这两点那就不要用这种方法,可以用配置多个hibernate.cfg.xml 的方式来进行也就是说配置多个链接然后创建多个session 进行操作,麻烦死,希望你们能使用第一种方法。 再说一句就是hibernate多库查询的时候HQL不需要写库名了只写类名我们只需将catalog 配置好就行了。

相关推荐