由于目的,我需要在插入后立即获取对象的id。我可以使用这段代码:
session.save(Object o) // insert to database
findByPorperty( o.property ) // Return the inserted object along with the id
我认为上面的代码是不够的,因为会话需要重新打开才能找到对象。所以:
答案 0 :(得分:70)
session.save(object)返回对象的id,或者您也可以在执行保存后调用id getter方法。
保存()返回值:
Serializable save(Object object) throws HibernateException
<强>返回:强>
the generated identifier
Getter方法示例:
UserDetails实体:
@Entity
public class UserDetails {
@Id
@GeneratedValue
private int id;
private String name;
// Constructor, Setters & Getters
}
测试ID的逻辑:
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.getTransaction().begin();
UserDetails user1 = new UserDetails("user1");
UserDetails user2 = new UserDetails("user2");
//int userId = (Integer) session.save(user1); // if you want to save the id to some variable
System.out.println("before save : user id's = "+user1.getId() + " , " + user2.getId());
session.save(user1);
session.save(user2);
System.out.println("after save : user id's = "+user1.getId() + " , " + user2.getId());
session.getTransaction().commit();
此代码的输出:
保存前的:用户ID&#39; s = 0,0
保存后的:用户ID&#39; s = 1,2
根据此输出,您可以看到在我们保存UserDetails
实体之前未设置ID,一旦您保存了实体,则Hibernate设置了id {s}对于您的对象 - user1
和user2
答案 1 :(得分:8)
假设你的主键是一个整数,你保存的对象是“票证”,那么你可以这样得到它。保存对象时,始终返回Serializable id
Integer id = (Integer)session.save(ticket);
答案 2 :(得分:3)
或以更好的方式我们可以有这样的
假设你的主键是一个整数,你保存的对象是“票证”,那么你可以这样得到它。保存对象时,始终返回id
//将在此处进行取消装箱,以便此处的ID将是值类型而不是引用类型。现在,您可以在保存失败的情况下检查id为0。如下所示:
int id = (Integer) session.save(ticket);
if(id==0)
your session.save call was not success.
else '
your call to session.save was successful.
答案 3 :(得分:2)
默认情况下,当您尝试使用Save(entity)
方法保存实体时,hibernate框架将立即返回id。没有必要明确地这样做。
如果您的主键是int
,您可以使用以下代码:
int id=(Integer) session.save(entity);
如果在代码下面使用字符串:
String str=(String)session.save(entity);
答案 4 :(得分:1)
在你的 POJO 类中,给主键这些注释
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
现在保存对象时,可以使用为 id 设置的 getter 方法获取 Id。
session.save(stud1);
// save the student object
session.getTransaction().commit();
// commit transaction
session = factory.getCurrentSession();
session.beginTransaction();
// now get a new session and start transaction
Student stud2 = session.get(Student.class, stud1.getId());
// retrieve student based on the id: primary key
System.out.println(stud2);
session.getTransaction().commit();