[英]How to get auto generated Id after persist into the mysqlDB Using JPA
[英]Get database generated ID after persist in Hibernate
我需要檢索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;
...
}
但是,在執行下一段代碼時,該實體保存在DB中,但是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()
函數,但是拋出異常,表明沒有事務處於活動狀態。
您需要添加一個
em.flush();
強制實體管理器同步數據。 然后at.getID()
將返回該值。
在這里,您有一個解決方案:
實體 :
@Entity
@Table(name = "TableName")
public class TableNameClass {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", insertable = false, nullable = false, unique = true, updatable = false)
private int ID;
...
}
創建功能
TableNameClass tnc = new TableNameClass();
tnc.setName("Solution");
Session s = HibernateUtil.getSessionFactory().openSession();
Transaction t = s.beginTransaction();
Integer myID = (Integer)s.save(tnc);
t.commit();
s.close();
System.out.println(myID);
如您所見,我為@GeneratedValue(strategy = GenerationType.IDENTITY)
更改了@Generated
批注。 我不知道它們是否代表相同的意思,但是可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.