Towards the Hibernate first part.
The reason why you needed the insertable/updatable to false is because the FK id would be mapped twice in your class. So now in
Java code you must make sure you set both object properties.
So if you have
both of those are the FK to the parent table. So if you didn't have insertable/updatablse = false on one of them update and insert statements to the child table would have parent_id field in there twice like
insert into child fields(parent_id, parent_id) values (?, ?)
so if you have
@Column(insertable = false, updatable=false)
private Parent parent;
and you only set the parent attribute and not the parentId attribute it will never populate the parent_id field in the child table.
I used annotations for Hibernate to make it simple to post rather than xml mapping.
Mark