Пружинный башмак с жидкостной базой @OneToMany mapping
У меня два лица Person
а также Address
, А также Person
может иметь несколько Address
,
<createTable tableName="ADDRESS">
<column name="id" type="bigint(20)" autoIncrement="true">
<constraints primaryKey="true" nullable="false" />
... //columns
</column>
</createTable>
<createTable tableName="PERSON">
<column name="id" type="bigint(20)" autoIncrement="true">
<constraints primaryKey="true" nullable="false" />
... //columns
</column>
</createTable>
<addForeignKeyConstraint
constraintName="fk_constraint_worker_phone_number"
referencedTableName="CONTACT_NUMBER" baseColumnNames="ContactNumbers"
baseTableName="WORKER" referencedColumnNames="id" />
Я хочу 3-ий стол (как Hibernate генерировать в @OneToMany
отображение).
Как это сделать с liquibase-springboot
?
2 ответа
Если отношение действительно OnToMany, вам не нужна третья таблица. Просто добавьте PrimaryKeyJoinColumn.
Если адрес может быть повторно использован для многих людей, это отношение ManyToMany.
Вы можете использовать @ManytoMany и добавить информацию о вашей объединенной таблице в @jointable
Что ж, в случае с ликвидазой мы должны вручную создать третью таблицу и применить необходимые ограничения.
Создайте таблицу, которая управляет отображением:
<createTable tableName="PERSON_ADDRESS">
<column name="PERSON_ID" type="BIGINT">
<constraints primaryKey="true" nullable="false" />
</column>
<column name="ADDRESS_ID" type="BIGINT">
<constraints primaryKey="true" nullable="false" />
</column>
</createTable>
Примените ограничения:
1) Убедитесь, что Person
s id
является уникальным в таблице сопоставления
2) отношение внешнего ключа между ADDRESS
ID и PERSON_ADDRESS
"s PERSON_ID
3) отношения внешнего ключа между PERSON
ID и PERSON_ADDRESS
"s ADDRESS_ID
<addUniqueConstraint
columnNames="PERSON_ID" tableName="PERSON_ADDRESS"
constraintName="UK_PHONE_NUMBERS_ID" />
<addForeignKeyConstraint
constraintName="FK_ADDRESS_PERSON_ADDRESS"
referencedTableName="ADDRESS"
baseColumnNames="ADDRESS_ID"
baseTableName="PERSON_ADDRESS" referencedColumnNames="id" />
<addForeignKeyConstraint
constraintName="FK_PERSON_PERSON_ADDRESS"
referencedTableName="PERSON"
baseColumnNames="PERSON_ID"
baseTableName="PERSON_ADDRESS" referencedColumnNames="id" />