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。
答案 0 :(得分:0)
在构建SessionFactory
时指定数据库(通过DataSource
的连接字符串)。如果您想使用其他数据库,只需使用新的SessionFactory
重建DataSource
。
答案 1 :(得分:0)
声明并注入不同的SessionFactory
(每个数据库一个)。
答案 2 :(得分:0)
阅读Hibernate博客上的这篇文章:http://in.relation.to/Bloggers/MultitenancyInHibernate
史蒂夫说,使用ConnectionProvider比单独的SessionFactory更好。请记住禁用二级缓存。