我需要在persist()
之后检索数据库生成的ID。我的单位是这样的:在休眠后继续获取数据库生成的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,所以他们中的任何一个的解决方案都可以。
编辑:
我试着加入flush()
后save()
方法,但仍然没有工作:
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()
功能然而,抛出异常,说没有事务处于活动状态。
仍然无法正常工作。我已经更新了我所做的更改。任何想法?我正在使用Hibernate 5.2.4最终 –
提交关闭了事务,如果您使用CMP,则不需要。把它拿出来看看它是否有效。 – WPrecht
仍然无法正常工作。我已经删除了persist(),但仍然返回0.我也尝试通过保存没有事务的实体,按照本教程[链接](http://www.journaldev.com/3481/hibernate-session-merge -vs-update-save-saveorupdate-persist-example)并启用自动提交属性,但我认为这不再适用于最新版本的Hibernate。 –