那就不能使用Hibernate的ORM特点了,只能自己用SQL实现,Hibernate也可以支持直接SQL语言操作。
不过,为每个用户创建一张表,这本来就很不合理,非常难以管理,当用户数成千上万时,就会有成千上万的表,数据库就不能支持这么多的表,性能会很低。但数据表里有上百万条的记录,数据库还是很轻松应付,所以不应该通过无限增加表的数量来实现,而是修改表结构,在有限的表里更高性能的存储更多用户数据。
如果用户数很多,而且每条记录的列数很多,应该是考虑表的横行切割(一部分记录行放在一个表,另一部分的记录行放在另一个表,减轻记录行太多,而引起的表负担)或纵切割(记录行里的一部分列放在一个表,另一部分的列放在另一个表,减轻一条记录太大,而引起的表负担),或是这两种的混合。
还有比较简单的方式,通过修改范式设计(例如通过一对一关键关联,把用户的数据分别放在两个表里),实现更高性能的数据存放
方案一 :
在hibernate.cfg.xml中添加:
value的值可选项如下:
* validate 加载hibernate时,验证创建数据库表结构
* create 每次加载hibernate,重新创建数据库表结构。
* create-drop 加载hibernate时创建,退出是删除表结构
* update 加载hibernate自动更新数据库结构
方案二 :
用自动生成代码后,在/src下面有一个jdbc.properties文件,这里加一句hibernate.hbm2ddl.auto=update。值的可选项同上。
每个用户创建一张表?天啊,这个需求下来,数据库会疯的……
我不知道楼主原本的需求是不是单独为这个用户保存一套数据,比如地址,电话,邮编等详细信息。如果是这样,建议楼主建两张表即可,类似
User和UserDetail表,然后再UserDetail表中有一个字段保存User的主键ID,这样就可以查询了。
如果楼主非要创建表的话,hibernate支持原声sql语句,楼主可以试一下。
session.createSqlQuery(); //貌似是这个方法吧。这个方法是传入SQL语句而不是HQL语句的。
hibernate的session可以返回connection对象用于执行jdbc来创建表。
难道不是先把表建好先的?用sql语句建呗~
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....