spring-使用 liquibase @OneToMany 映射启动
spring-boot with liquibase @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 个 table(就像 @OneToMany
映射中的休眠生成)。
如何使用 liquibase-springboot
执行此操作?
如果关系确实是 OnToMany,则不需要第三个 table。只需添加 PrimaryKeyJoinColumn.
如果地址可以被多人重复使用,就是多对多关系。
您可以使用@ManytoMany 并添加有关您加入的信息 table un @jointable
好吧,如果是 liquibase,我们必须手动创建第三个 table 并且必须应用必要的约束。
创建管理映射的 table :
<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
在映射 table
中是唯一的
2) ADDRESS
的id和PERSON_ADDRESS
的PERSON_ID
的外键关系
3) PERSON
的id和PERSON_ADDRESS
的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" />
我有两个实体 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 个 table(就像 @OneToMany
映射中的休眠生成)。
如何使用 liquibase-springboot
执行此操作?
如果关系确实是 OnToMany,则不需要第三个 table。只需添加 PrimaryKeyJoinColumn.
如果地址可以被多人重复使用,就是多对多关系。
您可以使用@ManytoMany 并添加有关您加入的信息 table un @jointable
好吧,如果是 liquibase,我们必须手动创建第三个 table 并且必须应用必要的约束。
创建管理映射的 table :
<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
在映射 table
2) ADDRESS
的id和PERSON_ADDRESS
的PERSON_ID
3) PERSON
的id和PERSON_ADDRESS
的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" />