Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从MySql数据库中获取hibernate表中最后插入的id_Java_Spring_Hibernate - Fatal编程技术网

Java 从MySql数据库中获取hibernate表中最后插入的id

Java 从MySql数据库中获取hibernate表中最后插入的id,java,spring,hibernate,Java,Spring,Hibernate,我有一个名为Item的实体,我在其中声明了一个属性 @列(name=“ITEM_CODE”,unique=true,长度=30) 私有字符串项代码 在相应的表中插入一个新项时,我试图通过在其前面加上PRO前缀,然后连接使用random类生成的随机数来生成一个唯一的代码。 我还尝试获取数据库中插入的最后一个项目id,并用id添加1,然后将其作为后缀添加到产品代码中。 我实现目标的代码是 公共字符串generateItemCode(){ } 我还尝试在方法体中使用这行代码 int maxId= (I

我有一个名为Item的实体,我在其中声明了一个属性

@列(name=“ITEM_CODE”,unique=true,长度=30) 私有字符串项代码

在相应的表中插入一个新项时,我试图通过在其前面加上PRO前缀,然后连接使用random类生成的随机数来生成一个唯一的代码。 我还尝试获取数据库中插入的最后一个项目id,并用id添加1,然后将其作为后缀添加到产品代码中。 我实现目标的代码是

公共字符串generateItemCode(){

}

我还尝试在方法体中使用这行代码

int maxId= (Integer)sessionFactory.getCurrentSession().createQuery("select max(id) from items").uniqueResult();
上述代码不起作用。 如何获取最后插入的id。有没有更简单的方法?
提前感谢。

您的问题可能是因为您的查询语法模仿了本机SQL,而实际上您并不是要求Hibernate执行本机查询,而是要求HQL/JPQL查询

如果我们假设您的实体名为
Item
,标识符属性名为
id
,则您将使用:

SELECT max(i.id) FROM Item i
您会注意到我使用了属性名
id
和实体名
(这里的大小写很重要)

要将各部分组合在一起,以下各项应起作用:

// be sure to check for null lastId in case you have no items.
final String sql = "SELECT max( i.id ) FROM Item i";
Integer lastId = (Integer) session.createQuery( sql ).uniqueResult();

为什么不使用Hibernate的ID生成器呢?这是一种非常糟糕的做法。如果表中插入了另一个sql会话,则这可能会更改输出。我在一个这样做的地方工作,然后花了将近一年的时间来修复代码,类似于这个答案中提到的。使用特定于sql方言的某种形式的last_insert_id。
// be sure to check for null lastId in case you have no items.
final String sql = "SELECT max( i.id ) FROM Item i";
Integer lastId = (Integer) session.createQuery( sql ).uniqueResult();