Подтвердить что ты не робот

Hibernate - получить идентификатор после сохранения объекта

Из-за какой-то цели мне нужно получить идентификатор объекта сразу после вставки. Я могу работать с этим кодом:

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

Я думаю, что вышеуказанный код недостаточен, потому что сеанс нужно снова открыть, чтобы найти объект. Итак:

  • Есть ли лучший способ получить идентификатор?
  • Если есть, могу ли я применить ту же стратегию для получения списка идентификаторов после вставки мешка с объектом?
4b9b3361

Ответ 1

session.save(object) возвращает идентификатор объекта, или вы можете альтернативно вызвать метод 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
}

Логика для проверки идентификатора:

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 = "+user1.getId() + " , " + user2.getId());

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

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

session.getTransaction().commit();

Вывод этого кода:

перед сохранением: user id = 0, 0

после сохранения: user id = 1, 2

В соответствии с этим выходом вы можете видеть, что идентификатор не был установлен, прежде чем мы сохраним объект UserDetails, как только вы сохраните объекты, а затем Hibernate установит идентификатор для ваших объектов - user1 и user2

Ответ 2

Предположим, что ваш первичный ключ - это Integer, а объект, который вы сохраняете, - это "билет", тогда вы можете получить его так. Когда вы сохраняете объект, id всегда возвращается

Integer id = (Integer)session.save(ticket);

Ответ 3

или лучше, мы можем иметь это

Предположим, что ваш первичный ключ - это Integer, а объект, который вы сохраняете, - это "билет", тогда вы можете получить его так. Когда вы сохраняете объект, id всегда возвращается

//здесь будет происходить unboxing, так что здесь 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.

Ответ 4

По умолчанию, hibernate framework немедленно возвращает id, когда вы пытаетесь сохранить объект, используя метод Save(entity). Нет необходимости делать это явно.

Если ваш первичный ключ int, вы можете использовать код ниже:

int id=(Integer) session.save(entity);

В случае использования строки ниже кода:

String str=(String)session.save(entity);