Hibernate - получить идентификатор после сохранения объекта
Из-за какой-то цели мне нужно получить идентификатор объекта сразу после вставки. Я могу работать с этим кодом:
session.save(Object o) // insert to database
findByPorperty( o.property ) // Return the inserted object along with the id
Я думаю, что вышеуказанный код недостаточен, потому что сеанс нужно снова открыть, чтобы найти объект. Итак:
- Есть ли лучший способ получить идентификатор?
- Если есть, могу ли я применить ту же стратегию для получения списка идентификаторов после вставки мешка с объектом?
Ответы
Ответ 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);