在Hibernate在线文档中,在第7.2.3节"一对多"中,提到了:
外键上的单向一对多关联是一种不常见的情况,不建议这样做.您应该使用连接表进行此类关联.
我想知道为什么?我唯一想到的是,它可以在级联删除期间产生问题.例如,Person指的是外键上一对多关系的地址,该地址将拒绝在该人之前删除.
任何人都可以解释推荐背后的理性吗?
以下是参考文件内容的链接:7.2.3.一到多
我在这里复制粘贴了实际内容:
外键上的单向一对多关联是一种不寻常的情况,不建议这样做.
Run Code Online (Sandbox Code Playgroud)<class name="Person"> <id name="id" column="personId"> <generator class="native"/> </id> <set name="addresses"> <key column="personId" not-null="true"/> <one-to-many class="Address"/> </set> </class> <class name="Address"> <id name="id" column="addressId"> <generator class="native"/> </id> </class>
Run Code Online (Sandbox Code Playgroud)create table Person (personId bigint not null primary key) create table Address (addressId bigint not null primary key, personId bigint not null)您应该使用连接表进行此类关联.
我想使用连接表在两个表之间建立一对多的关系.
这就是我想使用连接表的原因:
最后,我想使用Hibernate注释来执行此操作.
我找到了一些使用xml映射执行此操作的示例,但没有使用注释.
我相信这将是如何创建表格的
CREATE TABLE `PRODUCT` (
`PRODUCT_ID` BIGINT PRIMARY KEY AUTO_INCREMENT
);
CREATE TABLE `PARTS` (
`PART_ID` BIGINT PRIMARY KEY AUTO_INCREMENT
);
-- USER_IMAGE_ID must be unique if we want a one-to-many relationship between PRODUCTS & PARTS tables
CREATE TABLE `USER_DETAILS_IMAGE` (
`PRODUCT_ID` BIGINT,
`PART_ID` BIGINT UNIQUE,
CONSTRAINT `FK_PRODUCT_ID` FOREIGN KEY (`PRODUCT_ID`) REFERENCES `PRODUCT`(`PRODUCT_ID`),
CONSTRAINT `FK_PART_ID` FOREIGN KEY (`PART_ID`) REFERENCES `PARTS`(`PART_ID`)
);
Run Code Online (Sandbox Code Playgroud) 可以@OneToMany使用@JoinColumn注释禁用关系连接表.默认为连接表.
例如,生产系统有哪些优缺点?
什么时候应该使用连接表?
谢谢.
hibernate ×2
one-to-many ×2
annotations ×1
eclipselink ×1
java ×1
jpa-2.0 ×1
mapping ×1
rdbms ×1
sql ×1