gpt4 book ai didi

java - 在Hibernate中持久化后获取数据库生成的ID

转载 作者:行者123 更新时间:2023-11-30 07:59:59 25 4
gpt4 key购买 nike

我需要检索数据库在 persist() 之后生成的 ID。我的实体如下所示:

@Entity
@Table(name = "TableName")
public class TableNameClass {

@Id
@Generated(GenerationTime.INSERT)
@Column(name = "ID", insertable = false, nullable = false, unique = true, updatable = false)
private int ID;

...
}

但是,当执行下一段代码时,实体被保存到数据库中,但System.out.println的结果是0:

Session s = HibernateUtil.getSessionFactory().openSession();
TableNameClass tnc = new TableNameClass();
tnc.setName("SessionTest4");
Transaction t = s.beginTransaction();
s.save(tnc);
t.commit();
System.out.println(tnc.getID());
s.close();

有人可以帮我吗?

PD:我不关心使用 Session 或 EntityManager,因此针对其中任何一个的解决方案都可以。

编辑:

我尝试在 save() 方法之后添加 flush(),但仍然不起作用:

Session s = HibernateUtil.getSessionFactory().openSession();
AlertType at = new AlertType();
at.setName("SessionTest4");
Transaction t = s.beginTransaction();
s.save(at);
s.flush();
t.commit();
System.out.println(at.getID());
s.close();

我还尝试在 commit() 之后添加 flush() 函数,但是会抛出异常,表示没有 Activity 的事务。

最佳答案

您需要添加

em.flush();

强制实体管理器同步数据。然后at.getID()将返回该值。

关于java - 在Hibernate中持久化后获取数据库生成的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38855033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com