需要在Hibernate中在运行时将类映射到不同的数据库

时间:2010-06-09 02:34:28

标签: java mysql hibernate mapping

MainDB,...,UserDB_1数据库中有UserDB_N数据库和未知数(编译时)。 MainDB包含某些表中UserDB个数据库的名称(可以在运行时创建新的UserDB)。

所有UserDB具有完全相同的表名和字段。

如何在Hibernate中处理这种情况? (数据库结构无法更改)。

目前我计划创建未映射到任何内容的通用User类,只使用本机SQL进行所有查询:

session.createSQLQuery("select * from " + db + ".user where id=1")
    .setResultTransformer(Transformers.aliasToBean(User.class));

我还能做些什么吗?理想情况下,我希望拥有UserDB表和关系的映射,并在所需的数据库上使用HQL。

3 个答案:

答案 0 :(得分:0)

在构建SessionFactory时指定数据库(通过DataSource的连接字符串)。如果您想使用其他数据库,只需使用新的SessionFactory重建DataSource

答案 1 :(得分:0)

声明并注入不同的SessionFactory(每个数据库一个)。

答案 2 :(得分:0)

阅读Hibernate博客上的这篇文章:http://in.relation.to/Bloggers/MultitenancyInHibernate

史蒂夫说,使用ConnectionProvider比单独的SessionFactory更好。

请记住禁用二级缓存。