I am still pretty much a hibernate newb. I am trying to solve an issue when I start my server:
org.hibernate.MappingException: Unable to find column with logical name: organization_id in spe_workflow
Entities as below:
@Entity @Table(name = "sep_pr_req_att") public class PrReqAtt implements Serializable, IPojo { private static final long serialVersionUID = 1L; @Id @GeneratedValue(generator="hiloen") @GenericGenerator(name="hiloen", strategy = "org.hibernate.id.enhanced.TableGenerator") @Basic(optional = false) @Column(name = "uuid") private Integer uuid; @JoinColumn(name = "pr_req_id", referencedColumnName = "uuid") @ManyToOne(optional = false) private PrReq prReqId; // error happened after adding this attribute @JoinColumns({ @JoinColumn( name = "stage", referencedColumnName = "id"), @JoinColumn( name = "organization_id", referencedColumnName = "organization_id") }) @ManyToOne private ProcessFlow processFlow; // ... } @Entity @Table(name = "spe_workflow") public class ProcessFlow implements Serializable, IPojo { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "id") private Integer id; @JoinColumn(name = "organization_id", referencedColumnName = "uuid", insertable = false, updatable = false) @ManyToOne(optional = false) private Organization organization; // ... }
SQL Files:
CREATE TABLE `sep_pr_req_att` ( `uuid` int(11) NOT NULL, `pr_req_id` int(11) NOT NULL, `stage` int(11) NULL DEFAULT NULL, `organization_id` int(11) NULL DEFAULT NULL, PRIMARY KEY (`uuid`) USING BTREE, INDEX `pr_req_att_fk1`(`pr_req_id`) USING BTREE, INDEX `FKE35948C46A2C65EF`(`pr_req_id`) USING BTREE, INDEX `pr_req_att_fk2`(`stage`) USING BTREE, INDEX `pr_req_att_fk3`(`organization_id`) USING BTREE, CONSTRAINT `FKE35948C46A2C65EF` FOREIGN KEY (`pr_req_id`) REFERENCES `sep_pr_req` (`uuid`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `pr_req_att_fk1` FOREIGN KEY (`pr_req_id`) REFERENCES `sep_pr_req` (`uuid`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `pr_req_att_fk2` FOREIGN KEY (`stage`) REFERENCES `spe_workflow` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `pr_req_att_fk3` FOREIGN KEY (`organization_id`) REFERENCES `spe_workflow` (`organization_id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; CREATE TABLE `spe_workflow` ( `id` int(11) NOT NULL, `organization_id` int(11) NOT NULL, PRIMARY KEY (`id`, `organization_id`) USING BTREE, INDEX `spe_workflow_fk1`(`organization_id`) USING BTREE, INDEX `id`(`id`) USING BTREE, CONSTRAINT `spe_workflow_fk1` FOREIGN KEY (`organization_id`) REFERENCES `om_organization` (`uuid`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
Error happened after adding two new columns stage
and organization_id
in sep_pr_req_att
which is suppose to join to ProcessFlow
entity/ spe_workflow
table. I am referring to an existing similar table structure on the mapping. I believe I am missing something here. What am I doing wrong?
Advertisement
Answer
You spe_workflow
table has a composite primary key, so you should correct your mapping accordingly. There are several possible approaches.
For example you can use @IdClass:
@Entity @Table(name = "spe_workflow") @IdClass(ProcessFlowPK.class) public class ProcessFlow implements IPojo { @Id @Column(name = "id") private Integer id; @Id @Column(name = "organization_id") private Integer organizationId; // ... } public class ProcessFlowPK implements Serializable { private Integer id; private Integer organizationId; public ProcessFlowPK() { } public ProcessFlowPK(Integer id, Integer organizationId) { this.id = id; this.organizationId = organizationId; } // equals , hashCode , getters , setters are omitted for brevity }