Oracle数据库到MySQL数据库迁移过程中的一大难题就是主键生成策略的替换. 如果之前的程序中使用Oracle的Sequence
机制来实现主键的自增的话. MySQL中需要使用TableGenerator
进行等价替换.
替换的时候, 主要有三个地方需要修改:
- 以注解方式完成hibernate映射的实体;
- 以xml方式完成hibernate映射的实体;
- 数据库存储过程;
注解方式完成hibernate映射的实体的修改
使用Oracle Sequence
假如你之前的程序使用的是Sequence
, 这里以一个名为SEQ
的Sequence
为例, 那么你操作id
字段的代码应该长的是下面这个样子:
// 注意: 如果不指定sequenceName的话, 默认为HIBERNATE_SEQUENCE, 这个序列也需要在Oracle中手动建立.
@SequenceGenerator(name = "generator", sequenceName = "SEQ")
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "generator")
public Long getId() {
return id;
}
使用MySQL表模拟Oracle Sequence
首先你需要在MySQL中建立一个表sys_sequence
, 表中有两个字段, 一个是seq_name
, 代表Oracle序列的名称, 另一个是current_value
, 代表该序列的当前值(注意: 需要将此初始值设定为Oracle数据库中对应序列的当前值.). 表的样子如下:
> select * from sys_sequence;
+--------------+------------+
| seq_name | curr_value |
+--------------+------------+
| SEQ | 2809 |
+--------------+------------+