given table (my_table_a
) automatically increments it's id upon each new insertion (i.e. first record in database has it's id attribute 1, second record has it's id attribute set 2, third record has it's id attribute set 3). id talking table's primary key.
i have table (my_table_b
) reference's original table's primary key. when try persist both oracle database, org.hibernate.id.identifiergenerationexception: ids class must manually assigned before calling save()
what want accomplish: whenever persist object my_table_a
, want my_table_b
insert object same id my_table_a
gets since it's auto incremented (wouldn't know next value until it's inserted). clarify, 1 id in table should have 1 matching id in table b
here snippets of code below:
firstclass:
@entity @table(name = "my_schema.my_table_a") @component public class firstclass implements serializable { @id @sequencegenerator(name = "my_seq", sequencename = "my_schema.my_seq", allocationsize = 1) @generatedvalue(strategy = generationtype.sequence, generator = "my_seq") @column(name = "my_id") private integer myid; // more variables, getters/setters }
secondclass:
@entity @table(name = "my_schema.my_table_b") @secondarytable(name = "my_schema.my_table_a", pkjoincolumns = @primarykeyjoincolumn(name = "my_id", referencedcolumnname = "my_id")) @component public class secondclass { @id @column(name = "my_id") private integer myid; // more variables, getters/setters }
service layer snippet insert new entries each in oracle:
firstclassservice.insert(); secondclassservice.insert();
details on insert()
firstclassservice:
public void insert() { firstclass obj = new firstclass(); getcurrentsession().persist(obj); }
insert()
secondclassservice:
public void insert() { secondclass obj = new secondclass(); getcurrentsession().persist(obj); }
update
what firstclass looks now:
@entity @table(name = "my_schema.my_table_a") @component public class firstclass implements serializable { @id @sequencegenerator(name = "my_seq", sequencename = "my_schema.my_seq", allocationsize = 1) @generatedvalue(strategy = generationtype.sequence, generator = "my_seq") @column(name = "my_id") @onetoone(mappedby = "myid") private integer myid; }
secondclass:
@entity @table(name = "my_schema.my_table_b") @secondarytable(name = "my_schema.my_table_b", pkjoincolumns = @primarykeyjoincolumn(name = "my_id", referencedcolumnname = "my_id")) @component public class secondclass implements serializable { @id @joincolumn(name = "my_id", referencedcolumnname = "my_id") @onetoone private integer restrequestid; }
mappings should below:
@entity @table(name = "my_schema.my_table_a") @component public class firstclass implements serializable { @id @sequencegenerator(name = "my_seq", sequencename = "my_schema.my_seq", allocationsize = 1) @generatedvalue(strategy = generationtype.sequence, generator = "my_seq") @column(name = "my_id") private long myid; @onetoone(mappedby = "firstclass", cascade = cascadetype.all) private secondclass secondclass; } @entity @table(name = "my_schema.my_table_b") @component public class secondclass implements serializable { @id @joincolumn(name = "my_id", referencedcolumnname = "my_id") @onetoone private firstclass firstclass; }
with cascade option set you need make call save firstclass: associated secondclass persisted automatically - assuming set both sides of relationhsip in in-memory model i.e.
firstclass.setsecondclass(secondclass); secondclass.setfirstclass(firstclass);
Comments
Post a Comment