Java 获取hibernate中实体的最后一个id
我需要一种方法来获取数据库中实体的最后一个id,比如说 产品实体: 我尝试过这个,但它不起作用:Java 获取hibernate中实体的最后一个id,java,hibernate,postgresql,lastinsertid,Java,Hibernate,Postgresql,Lastinsertid,我需要一种方法来获取数据库中实体的最后一个id,比如说 产品实体: 我尝试过这个,但它不起作用: public int lastInsertedId() { try { if (!session.isOpen()) session = DatabaseUtil.getSessionFactory().openSession(); session.beginTransaction();
public int lastInsertedId() {
try {
if (!session.isOpen())
session = DatabaseUtil.getSessionFactory().openSession();
session.beginTransaction();
Query query = session.createSQLQuery("select last_value from purchase_idpurchase_seq ");
int lastid = query.getFirstResult();
session.getTransaction().commit();
session.close();
return lastid;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
尝试使用类似以下内容:
String hql = "from purchase_idpurchase_seq";
Query query = session.createQuery(hql);
List<purchase_idpurchase_seq> results = query.list();
我想您有一个实体purchase\u idpurchase\u seq
试着看看这个在谷歌搜索了一下之后,我得到了解决方案:
public int lastInsertedId() {
try {
if (!session.isOpen())
session = DatabaseUtil.getSessionFactory().openSession();
session.beginTransaction();
Criteria c = session.createCriteria(Purchase.class);
c.addOrder(Order.desc("id"));
c.setMaxResults(1);
int id = (int) ((Purchase) c.uniqueResult()).getIdPurchase();
session.getTransaction().commit();
session.close();
return id;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
你在Postgres手册的哪里找到了这种语法?当我在postgresql中执行这个查询时:从purchase\u idpurchase\u seq中选择最后一个值,我会得到一个结果,但我不知道如何在hibernateNo中实现这一点,我不使用特定值它不工作到底意味着什么?它抛出了一个PostgreSQL错误?还是其他java例外?或者给零,或者其他错误的值?它现在对我有效。purchase_idpurchase_seq是数据库中的顺序,purchase是entity@abdouamer请参阅上面的链接,这很有帮助。您必须使用
currval()
或lastval()
(我在第一条评论中已发布的链接)来获取最近生成的序列值。如果有多个事务正在修改数据库,则代码将无法正常工作。另外:我非常确定Hibernate应该能够在本机上做到这一点。Hibernate没有“SequenceGenerator”注释吗
public int lastInsertedId() {
try {
if (!session.isOpen())
session = DatabaseUtil.getSessionFactory().openSession();
session.beginTransaction();
Criteria c = session.createCriteria(Purchase.class);
c.addOrder(Order.desc("id"));
c.setMaxResults(1);
int id = (int) ((Purchase) c.uniqueResult()).getIdPurchase();
session.getTransaction().commit();
session.close();
return id;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}