hibernate - 保存对象后获取id

时间:2014-08-29 04:23:21

标签: hibernate

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

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

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

  1. 是否有更好的方法来获取ID?
  2. 如果有,我可以在插入一包物品后应用相同的策略来获取ID列表吗?

5 个答案:

答案 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}对于您的对象 - user1user2

答案 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();