I'm sorry I quickly scanned this and didn't read it in full... Here is my 2 cents.
"InnoDB rejects any INSERT or UPDATE operation that attempts to create a foreign key value in a child table if there is no a matching candidate key value in the parent table." So the parent has a valid entry before a row is created in the child? I noticed in defining the mysql table you use: foreign key (companyId) references company(id) Which has no ON DELETE or ON UPDATE clauses... so of course the above becomes: FOREIGN KEY (jcompanyid) REFERENCES company(id) ON DELETE RESTRICT ON UPDATE RESTRICT This would prevent you from deleting the parent or changing the foreign key in the parent if there is a dependant child. I bring this up because I noticed the use of CascadeType's.