【发布时间】:2023-03-31 15:55:02
【问题描述】:
section: 8.5.1. one-to-many / many-to-one:
映射文件为:
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<set name="addresses"
table="PersonAddress">
<key column="personId"/>
<many-to-many column="addressId"
unique="true"
class="Address"/>
</set>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
<join table="PersonAddress"
inverse="true"
optional="true">
<key column="addressId"/>
<many-to-one name="person"
column="personId"
not-null="true"/>
</join>
</class>
这里对于多对多有unique="true",但休眠仍然没有在数据库级别创建任何唯一约束。
Hibernate 生成的 DDL 有:
Hibernate: create table ADDRESS (addressId number(10,0) not null, primary key (addressId))
Hibernate: create table PERSON (personId number(10,0) not null, primary key (personId))
Hibernate: create table PersonAddress (addressId number(10,0) not null, personId number(10,0) not null, primary key (personId, addressId))
Hibernate: alter table PersonAddress add constraint FK_g7rqpos3mwhjs6ipfxn6myn3w foreign key (addressId) references ADDRESS
Hibernate: alter table PersonAddress add constraint FK_m5y6eriigdoy1olr7k28a9h6u foreign key (personId) references PERSON
如果 Hibernate 没有创建任何唯一约束,那么为什么我们需要在映射文件中提及它呢?谁能解释一下,谢谢。
【问题讨论】: