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

时间:2016-08-19 16:19:42

标签: java spring hibernate

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

@Column(name =" ITEM_CODE",unique = true,length = 30) private String itemCode

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

public String generateItemCode(){

String query = "SELECT max(i.id) FROM ITEM i";
List list = sessionFactory.getCurrentSession().createQuery(query).list();
int nextInsertId = ((Integer) list.get(0)).intValue() + 1;
Random random = new Random();
int number = random.nextInt(9999 - 1 + 1) + 1;
return "" + number+nextInsertId;

}

我也试过在方法体中使用这行代码。

int maxId= (Integer)sessionFactory.getCurrentSession().createQuery("select max(id) from items").uniqueResult();

以上代码无效。 我怎样才能获得最后插入的id。有没有更简单的方法呢? 提前谢谢。

1 个答案:

答案 0 :(得分:-1)

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

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

SELECT max(i.id) FROM Item i

您会注意到我使用了属性名称id和实体名称Item(这里的情况很重要)。

要将各个部分组合在一起,以下内容应该有效:

// 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();