hibernate+pg数据库遇到的问题

Tinker77 攻城狮  2013-01-27 09:26:51
1.项目数据库需要在mysql,sqlserver,postgresql中自由切换。
2.对于些表通过hibernate.hbm。xml进行映射。(其中对每张表中的唯一标示符为主键,为从0开始自增)。
在hbm文件中,使用id为long,<generate >为native(为了一个映射文件可以在三个数据库公用)。
这个时候问题出现了。在mysql,sqlserver中每张表的id为从0开始自增。但是在pg中映射出来的数据表没有序列,只有通过手动create table(id serial)时才会有表名_字段_seq序列。
3.ok到这个时候,发现数据库中通过hibernate映射的进行数据插入(手动创见表产生序列的表)时,id的值却为一个hibernate_sequence中next值,导致全部表公用一个序列。

有什么解决方案吗?各位大大。如果在hbm中为每个id指定序列,那在mysql中又不回兼容了。
...全文
174 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
a404949 2013-07-25
你好。。我想问一下关于postgreSQL中在hibernate映射的问题,我在postgreSQL中的主键是serial,然后再映射文件中用seq好像不能使用,这个要这么处理?
  • 打赏
  • 举报
回复
Tinker77 2013-01-29
引用 1 楼 AA5279AA 的回复:
你这个好像就是一个 主键生成策略的问题。 另外序列我一般都是自己手动建的,不知道默认的是什么。 全部表公用一个序列的问题你可以这样来解决: 如果没有指定sequence参数,则Hibernate会访问一个默认的sequence,是hibernate_sequence,我们也需要在数据库中建立这个sequence 此外,sequence还可以有另外一个参数是para……
我也看了很多pg资料,确实和oracle序列一样,同一个hbm文件,没办法和mysql,sqlserver共用,只好抽出来,在切换数据库时进行处理,对于hibernate映射的表,采用手动脚本中创建序列,hbm文件中用param指定序列。
  • 打赏
  • 举报
回复
失落夏天 2013-01-28
你这个好像就是一个 主键生成策略的问题。 另外序列我一般都是自己手动建的,不知道默认的是什么。 全部表公用一个序列的问题你可以这样来解决: 如果没有指定sequence参数,则Hibernate会访问一个默认的sequence,是hibernate_sequence,我们也需要在数据库中建立这个sequence 此外,sequence还可以有另外一个参数是paramters,可以查看Hibernate的API了解它的用法,见org.hibernate.id.SequenceGenerator 调用数据库的sequence来生成主键,要设定序列名,不然hibernate无法找到: <param name="sequence">NAME_SEQ</param> 最后,只是建议,主键使用默认的sequence生成就可以了,id在数据库表中不一定非得设为主键。
  • 打赏
  • 举报
回复
zhanghua4109 2013-01-28
主键按自己的规则生成就行,如果需要多个库之间通用,最好不要我运算逻辑写在数据库端,应当的客户端来处理,数据库只做简单的持久化。
  • 打赏
  • 举报
回复
General-M 2013-01-28
http://javainzhuzhu.iteye.com/blog/855130
  • 打赏
  • 举报
回复
相关推荐
发帖
Java EE
加入

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2013-01-27 09:26
社区公告
暂无公告