java - JPA Composite Key with Object references -
i have faced issue while creating jpa composite key object references. entities show in bellow,
1) wan remove id field workflow entity , make composite key combining seqno field , template (object reference) field
2) according change updated existing relationship command entity (@joincolumn(name = "workflow_id", referencedcolumnname = "id"))
thanks.
template entity:
@entity @table(name = "template") public class template implements serializable { @id @generatedvalue(strategy = generationtype.sequence) @sequencegenerator(name="template_se", sequencename="template_se", allocationsize=1, initialvalue=1) @basic(optional = false) @column(name = "id") private integer id; @basic(optional = false) @column(name = "name", unique = true) private string name; @onetomany(cascade = cascadetype.remove, mappedby = "template") @lazycollection(lazycollectionoption.false) private list<workflow> workflowlist; }
workflow entity:
@entity @table(name = "workflow") public class workflow implements serializable { @id @generatedvalue(strategy = generationtype.sequence) @sequencegenerator(name="wf_se", sequencename="wf_se", allocationsize=1, initialvalue=1) @basic(optional = false) @column(name = "id") private integer id; @basic(optional = false) @column(name = "seq_no") private int seqno; @joincolumn(name = "t_id", referencedcolumnname = "id", nullable = false) @manytoone private template template; @basic(optional = false) @column(name = "name") private string name; }
command entity:
@entity @table(name = "command") public class command implements serializable { @id @generatedvalue(strategy = generationtype.sequence) @sequencegenerator(name="command_se", sequencename="command_se", allocationsize=1, initialvalue=1) @basic(optional = false) @column(name = "id") private integer id; @joincolumn(name = "workflow_id", referencedcolumnname = "id") @manytoone(optional = false) private workflow workflow; }
i have got things done on following manner.
embeddedid class
@embeddable public class workflowpk implements serializable { @basic(optional = false) @column(name = "seq_no") private int seqno; @joincolumn(name = "t_id", referencedcolumnname = "id", nullable = false) @manytoone private template template; }
workflow entity (with embeddedid)
@entity @table(name = "workflow") public class workflow implements serializable { @embeddedid private workflowpk id; @basic(optional = false) @column(name = "name") private string name; }
template entity bidirectional relation
@entity @table(name = "template") public class template implements serializable { @id @generatedvalue(strategy = generationtype.sequence) @sequencegenerator(name="template_se", sequencename="template_se", allocationsize=1, initialvalue=1) @basic(optional = false) @column(name = "id") private integer id; @basic(optional = false) @column(name = "name", unique = true) private string name; // refer filed "template" inside composite key of workflow entity @onetomany(cascade = cascadetype.remove, mappedby = "id.template") @lazycollection(lazycollectionoption.false) @orderby(value = "id.stepseqno") private list<workflow> workflowlist; }
command entity joincolumn reference
@entity @table(name = "command") public class command implements serializable { @id @generatedvalue(strategy = generationtype.sequence) @sequencegenerator(name="command_se", sequencename="command_se", allocationsize=1, initialvalue=1) @basic(optional = false) @column(name = "id") private integer id; // refer composite key of workflow entity @manytoone(optional = false) @joincolumns ({ @joincolumn(name="workflow_seq_no_id", referencedcolumnname = "seq_no"), @joincolumn(name="workflow_t_id", referencedcolumnname = "t_id"), }) private workflowstep workflow; }
Comments
Post a Comment