Hibernate 5 does not respect settings for foreign key naming via xml mapping files in following tags: joined-subclass, set (for many-to-many and one-to-many). For many-to-one setting foreign key name still works. So database created with xml mappings using Hibernate 4 is ok, every foreign key has a right name. When I want to use hibernate 5 to access database data, database is modified by adding new foreign keys with generated names. For example (using hibernate 5 to create database): <hibernate-mapping> <joined-subclass extends="model.Person" lazy="false" name="model.Child" table="CHILDEREN"> <key foreign-key="FK_CHILD_PERSON"> <column name="CHILD_ID"/> </key> <many-to-one cascade="save-update" class="model.Address" column="ADRES_ID" foreign-key="FK_CH_AD" name="address" unique="false"/> </joined-subclass> </hibernate-mapping>
Results in: create table CHILDEREN ( CHILD_ID integer not null, ADRES_ID integer, EMP_ID integer, primary key (CHILD_ID) ) ENGINE=InnoDB alter table CHILDEREN
-
add constraint FK98jk84qyyfgwf36x0ferbvkw7 *
foreign key (CHILD_ID) references PERSONS (PER_ID) alter table CHILDEREN add constraint *FK_CH_AD * foreign key (ADRES_ID) references ADDRESSES (ADDRESS_ID)
Second example: <hibernate-mapping> <joined-subclass extends="model.Person" lazy="false" name="model.Employee" table="EMPLOYEES"> <key foreign-key="FK_EMP_PER"> <column name="EMP_ID"/> </key> <many-to-one cascade="save-update" class="model.Address" column="ADDRESS_ID" foreign-key="FK_EMP_AD" name="address" unique="false"/> <property name="position" type="java.lang.String"> <column name="POSITION"/> </property> <many-to-one cascade="save-update" class="model.Department" column="DEP_ID" foreign-key="FK_EMP_DEP" name="department" unique="false"/> <set cascade="save-update" embed-xml="true" lazy="true" name="children"> <key foreign-key="FK_CHIL_EMP"> <column name="EMP_ID"/> </key> <one-to-many class="model.Child"/> </set> <set cascade="save-update" lazy="true" name="projects" table="EMP_PROJ"> <key foreign-key="FK_PROJ_EMP"> <column name="EMP_ID"/> </key> <many-to-many class="model.Project" column="PROJ_ID"/> </set> </joined-subclass> </hibernate-mapping>
results in: create table EMPLOYEES ( EMP_ID integer not null, ADDRESS_ID integer, POSITION varchar(255), DEP_ID integer, primary key (EMP_ID) ) ENGINE=InnoDB create table EMP_PROJ ( EMP_ID integer not null, PROJ_ID integer not null, primary key (EMP_ID, PROJ_ID) ) ENGINE=InnoDB alter table EMP_PROJ add constraint *FK3jwurn9su7kn5fssmtfiikx2q * foreign key (EMP_ID) references EMPLOYEES (EMP_ID)
alter table EMPLOYEES add constraint FKptnlm1vgga8r2sq14l04kiyxr foreign key (EMP_ID) references PERSONS (PER_ID)
alter table EMPLOYEES add constraint FK_EMP_AD foreign key (ADDRESS_ID) references ADDRESSES (ADDRESS_ID)
alter table EMPLOYEES add constraint FK_EMP_DEP foreign key (DEP_ID) references DEPARTMENTS (DEP_ID)
|