Получите ID ребенка в отношениях cascade = "all", добавляя его в коллекцию в Hibernate - PullRequest
0 голосов
/ 07 апреля 2010

У меня есть две сущности, «Родитель» и «Дочерний», которые связаны через двунаправленное отношение «один ко многим» с атрибутом каскада, установленным в «все». При добавлении дочернего объекта в коллекцию родительских детей с помощью приведенного ниже кода я не могу получить идентификатор сохраненного дочернего объекта, пока не совершу транзакцию:

Parent p = (Parent) session.load(Parent.class, pid);
Child c = new Child();
p.addChild(c);
// "c" hasn't an ID (is always zero) 

Однако, когда я сохраняю дочернюю сущность, явно вызывая метод session.save (), идентификатор создается и устанавливается немедленно, даже если транзакция не была зафиксирована:

Child c = new Child();
session.save(c);
// "c" has an ID

Есть ли способ получить идентификатор дочерней сущности сразу, не вызывая метод session.save ()?

Спасибо

1 Ответ

1 голос
/ 07 апреля 2010

Это на самом деле зависит от используемой вами схемы ID.

Если вы используете поля автоинкремента (например, MySQL, SQL Server), идентификатор не будет создан, пока объект не будет сохранен .

Если вы используете последовательности (например, Oracle), идентификатор будет создан, когда сущность будет сохранена .

Тогда я предполагаю, что у вас есть поле с автоинкрементом, и в этом случае ответ: нет, вы не можете получить идентификатор, не сохранив его. При этом вам не нужно нуждаться в этом удостоверении личности большую часть времени. Отношения с другими объектами обрабатываются неявно. Я предполагаю, что вы хотите идентификатор для какого-либо параметра URL или поля формы? В любом случае, да, вам нужно сохранить его.

...