Java分表

应用场景:同一数据库中,有一些结构完全相同的表,只是表名不一样,比如日志表。

分表可能是数据量的考虑,也可能是数据隔离的考虑,比如多租户应用中。

 

由于项目使用了Spring Data-JPA(JPA实现是Hibernate),而JPA不仅没有提供动态表名映射,而且大部分JPA实现会pre-compile some queries,所以在JPA技术下做分表非常困难。

 

因为分表、分库这类需求与sql语句联系紧密,所以对应的办法是选择jdbc、mybatis、jdbcTemplate这类使用原生sql的技术,Hibernate的方法1、方法2比较麻烦。

 

Hibernate中,一个SessionFactory代表着一个特定数据库的特定配置:

SessionFactory is a global factory responsible for a particular database. If you have several databases, for easier startup you should use several <session-factory> configurations in several configuration files.

创建SessionFactory时,实体-表名的映射关系也就固定了。多次创建不同的SessionFactory,然后建立不同的实体-表名映射。

 

 安全问题:

动态表名意味着字符串拼接,而字符串拼接意味着sql注入

 

posted on 2014-03-25 17:17  黄亚平  阅读(2083)  评论(0编辑  收藏  举报

导航