Если вы хотите, чтобы hibernate вставлял parent-child вместе с внешним ключом, используйте сопоставление объектов, а не идентификаторы.
Давайте возьмем пример из здесь ,
public class AMain {
//Properties of A.
List<ASub3> subList;
.....
}
public class ASub3 {
.....
AMain parent;
.....
}
в файле hbm.xml в AMain add,
<list name="subList" inverse="true" cascade="all" lazy="false">
<key column="a_id" />
<list-index column="as3_id" />
<one-to-many class="com.manu.hibernate.mappings.domain.ASub3" />
</list>
в Asub3 add,
<many-to-one name="parent" class="com.manu.hibernate.mappings.domain.AMain"
column="a_id" unique="true" cascade="save-update" />
Теперь в клиентском коде используйте бины, как показано ниже,
AMain a = new AMain("A");
ASub3 as3a = new ASub3("List - 1");
ASub3 as3b = new ASub3("List - 2");
ASub3 as3c = new ASub3("List - 3");
as3a.setParent(a);
as3b.setParent(a);
as3c.setParent(a);
List<ASub3> subList = new ArrayList<ASub3>();
subList.add(as3a);
subList.add(as3b);
subList.add(as3c);
a.setSubList(subList);
Теперь, если вы сохраните AMain, AMain и ASub3 будут обновлены (я имею в виду соответствующую таблицу) внешним ключом для AMain.