2014-01-31 47 views
0

我有表Employee与主键employee_id在oracle中。 我有一个遗留应用程序将记录插入到此表中。这个遗留应用程序使用使用本地SQL纯JDBC即作为JPA休眠Oracle - 自动生成主键由max + 1

INSERT INTO employee (employe_id, NAME) VALUES ((SELECT MAX (employee_id) + 1 FROM employee), NAME);

现在我正在开发使用JPA + Hibernate的,它具有插入记录同桌Employee新的应用程序。我坚持如何自动生成主键。遗留应用程序和新应用程序都将继续使用此表,并且我不允许对遗留应用程序代码进行任何更改。

如果我创建新的数据库序列并使用它,那么就有可能与旧应用程序和新应用程序发生冲突。

有没有办法告诉JPA使用MAX(employee_id)+1来自动生成主键。

+0

这种做法是错误的,可以在多用户环境中无法正常工作。是否有任何商业原因,为什么ymu必须重新实施它? – ibre5041

+0

使用序列来获得独特的想法。这个max()+ 1方法不会像伊万伤心那样工作。 – Christian13467

+0

谢谢@Ivan。我被要求在组件模型中实现它。在用户认证新应用程序之前,遗留应用程序也将被使用。我最好用DB序列去,也会得到遗留应用程序也使用DB序列。 – Adi

回答

0

我知道这是一个老问题,但只为记录: 如果有我目前的最高值 更新到真正大的值留出足够的空间在未来 “N”取决于多年来没有其他办法每天创建多少个条目。 然后将您的序列设置为差距内的第一个值,并且不要忘记告诉业务部门,这只是一个必须重构的中间解决方案 。

最好的问候, 扬