hibernate - 保存对象后获取id

Isa*_*sad 49 hibernate

由于目的,我需要在插入后立即获取对象的id.我可以使用这段代码:

 session.save(Object o)   // insert to database
 findByPorperty( o.property ) // Return the inserted object along with the id
Run Code Online (Sandbox Code Playgroud)

我认为上面的代码是不够的,因为会话需要重新打开才能找到对象.所以:

  1. 有没有更好的方法来获取身份证?
  2. 如果有,我可以在插入一个对象后应用相同的策略来获取ID列表吗?

Cha*_*nya 76

session.save(对象)返回对象的ID,或者你可以进行保存或者之后调用ID getter方法.

Save()返回值:

Serializable save(Object object) throws HibernateException
Run Code Online (Sandbox Code Playgroud)

返回:

the generated identifier
Run Code Online (Sandbox Code Playgroud)

Getter方法示例:

UserDetails实体:

@Entity
public class UserDetails {
    @Id
    @GeneratedValue
    private int id;
    private String name;

    // Constructor, Setters & Getters
}
Run Code Online (Sandbox Code Playgroud)

测试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();
Run Code Online (Sandbox Code Playgroud)

输出此代码:

保存之前:用户ID = 0,0

保存后:用户ID = 1,2

根据这个输出,你可以看到在我们保存UserDetails实体之前没有设置id ,一旦你保存了实体,那么Hibernate设置你的对象的id - user1user2

  • Hibernate本身为你设置了id,你不需要为它做任何事情.我在我的回答中添加了一个小例子,你可以看到`session.save(object)`之前和之后的区别 (3认同)

小智 9

假设你的主键是一个整数,你保存的对象是"票证",那么你可以这样得到它.保存对象时,始终返回Serializable标识

Integer id = (Integer)session.save(ticket);
Run Code Online (Sandbox Code Playgroud)