我有一个关于 Hibernate 中的主键生成的问题。我正在维护现有的注册表系统。当前设计使用字符串作为主键。规则类似于"EXE" + max()
. 下面是表格的样子。
+----------+---------------------------+----------------+
| ID | Email | Name |
+----------+---------------------------+----------------+
|EXE1 | email1@gmail.com | Name 1 |
+----------+---------------------------+----------------+
|EXE5 | email5@gmail.com | Name 5 |
+----------+---------------------------+----------------+
|EXE14 | email14@gmail.com | Name 14 |
+----------+---------------------------+----------------+
|EXE15 | email15@gmail.com | Name 15 |
+----------+---------------------------+----------------+
目前我使用下面的代码来生成 ID。
Long rowCount = (Long) getSession().createCriteria(Exemption168DB.class).setProjection(Projections.rowCount()).uniqueResult();
if(rowCount == null)
rowCount = 0L;
return String.format("%s%d", CommonConstant.EXEMPTION_KEY_PREFIX, rowCount + 1);
但问题是;它使用行数来获取下一个序列数字。因此在上述情况下,该方法将返回EXE5
(该 ID 已存在于表中,因此引发异常),因为表中的行数为 4,然后递增 1。我需要的是EXE16
.
任何帮助深表感谢。额外信息,我们使用 Informix 作为数据库引擎。