session - One Table to Multiple Table Mapping using Hibernate Annotation -
in case:
rack , slot entities having custom id generators. using unidirectional one-to-one mapping. dimension table hold data autogenerated custom id foreign key multiple tables (rack , slot example here). , schema looks : rack ------> dimension <-----------slot dimension hold data rack , slot table generated id.
here concern when saving data this:-
rack rack = new rack(params); dimension dim = new dimension(params); rack.setdimension(dim); session.save(rack);
data being saved same autogenerated id in rack , dimension tables.
but when saving data slot table :
slot slot = new slot(params); dimension dim = new dimension(params); slot.setdimension(dim); session.save(slot);
it showing error message as:-
attempted assign id null one-to-one property: rack
can pass dynamic property name "slot" when saving data slot , dimension , "rack" when saving data rack , dimension.
rack.java
@entity @table(name="tablename") @genericgenerator(name = "customseq", strategy = "customidgenerator") public class rack { @id @generatedvalue(generator = "customseq") @column(name = "uni_id") private string id; @onetoone(fetch = fetchtype.lazy, cascade = cascadetype.all) @primarykeyjoincolumn private dimension dimension; // getters , setters }
slot.java
@entity @genericgenerator(name = "slot_seq", strategy = "com.slot.slotidgenerator") @table(name = "\"slot_info\"") public class slot implements serializable { @id @generatedvalue(generator = "slot_seq") @column(name = "slot_id") private string slotid; @column(name = "rack_id") private string rackid; @column(name = "element_id") private string elementid; @column(name = "sr_no") private int srno; @joincolumn(name = "systemid", insertable = false, updatable = false) @primarykeyjoincolumn private dimension dimension; // getters , setters }
dimension.java
public class dimension implements serializable{ @id @column(name = "systemid") @generatedvalue(generator = "foreign") @genericgenerator(name = "foreign", strategy = "foreign", parameters = { @parameter(name = "property", value = "slot"), @parameter(name = "property", value = "rack")}) private string systemid; @onetoone(mappedby = "dimension", fetch = fetchtype.lazy) @primarykeyjoincolumn private rack rack; @onetoone(mappedby = "dimension", fetch = fetchtype.lazy) @primarykeyjoincolumn private slot slot; // getters , setters }
Comments
Post a Comment