hibernate - 保存对象后获取id [英] hibernate - get id after save object

查看:76
本文介绍了hibernate - 保存对象后获取id的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于目的,我需要在插入后立即获取对象的ID。我可以解决这个问题:

  session.save(Object o)//插入数据库
findByPorperty( o.property)//返回插入的对象以及id

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


  1. 有没有更好的方式获取id?

  2. 如果有,我可以吗应用相同的策略在插入一包对象后获得id列表
  3. session.save(object)返回对象的id,或者您可以在执行保存后调用id getter方法。
    $ b Save()返回值:

     可序列化保存(Object object)抛出HibernateException 

    返回:

     生成的标识符

    Getter方法示例:

    UserDetails实体:

      @Entity 
    public class UserDetails {
    @Id
    @GeneratedValue
    私人i nt id;
    私人字符串名称;

    //构造函数,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); //如果你想把id保存到变量

    System.out.println(save:user id's =+ user1.getId()+,+ user2.getId() );

    session.save(user1);
    session.save(user2);

    System.out.println(save:user id's =+ user1.getId()+,+ user2.getId());

    session.getTransaction()。commit();

    此代码的输出:



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



    保存之后:用户标识号为1,2



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


    Because of an purpose, I need to get an id of an object right after an insertion. I can work around with this code:

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

    I think the above code is not sufficient because the session need to reopen to find the object. So:

    1. Is there a better way obtain the id?
    2. If there is, can I apply the same strategy to obtain a list of ids after inserting a bag of object?

    解决方案

    The session.save(object) returns the id of the object, or you could alternatively call the id getter method after performing a save.

    Save() return value:

    Serializable save(Object object) throws HibernateException
    

    Returns:

    the generated identifier
    

    Getter method example:

    UserDetails entity:

    @Entity
    public class UserDetails {
        @Id
        @GeneratedValue
        private int id;
        private String name;
    
        // Constructor, Setters & Getters
    }
    

    Logic to test the id's :

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

    Output of this code:

    before save : user id's = 0 , 0

    after save : user id's = 1 , 2

    As per this output, you can see that the id's were not set before we save the UserDetails entity, once you save the entities then Hibernate set's the id's for your objects - user1 and user2

    这篇关于hibernate - 保存对象后获取id的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆