我想使用连接表在两个表之间建立一对多关系。
这就是我想使用连接表的原因:
- Hibernate 单向一对多关联 - 为什么连接表更好? https://stackoverflow.com/questions/1307203/hibernate-unidirectional-one-to-many-association-why-is-a-join-table-better
- 为什么建议避免外键上的单向一对多关联? https://stackoverflow.com/questions/2092611/why-is-it-recommended-to-avoid-unidirectional-one-to-many-association-on-a-forei
最后,我想使用 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`)
);
不要寻找例子。阅读官方文档 http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html_single/#example-one-to-many-with-join-table:
@Entity
public class Product {
private String serialNumber;
private Set<Part> parts = new HashSet<Part>();
@Id
public String getSerialNumber() { return serialNumber; }
void setSerialNumber(String sn) { serialNumber = sn; }
@OneToMany
@JoinTable(
name="PRODUCT_PARTS",
joinColumns = @JoinColumn( name="PRODUCT_ID"),
inverseJoinColumns = @JoinColumn( name="PART_ID")
)
public Set<Part> getParts() { return parts; }
void setParts(Set parts) { this.parts = parts; }
}
@Entity
public class Part {
...
}
另请注意,这是单向一对多关联的默认设置。所以你甚至不必提供@JoinTable
如果默认表和列名称适合您,请进行注释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)