【问题标题】:hibernate one to many using a join table, and hibernate annotations使用连接表休眠一对多,并休眠注释
【发布时间】:2012-10-24 10:35:51
【问题描述】:

我想使用连接表在两个表之间建立一对多关系。

这就是我要使用连接表的原因:

最后,我想使用 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`)
);

【问题讨论】:

    标签: hibernate annotations one-to-many hibernate-annotations


    【解决方案1】:

    不要寻找例子。阅读official documentation:

    @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 注释。

    【讨论】:

    • 谢谢 JB Nizet。我已经用我认为所需表格的样子更新了我的问题。对吗?
    • 感谢您指出文档(单页版本很方便!)。我确实发现文档精确但不友好,这就是为什么我在开始研究新技术时总是寻找示例的原因。那个很好,但也错过了表格创建部分dzone.com/tutorials/java/hibernate/hibernate-example/…
    • 看起来不错,除了 SERIAL_NUMBER 应该是 PRODUCT_ID 以匹配注释。
    • 我明白了,所以 serialNumber 与 PRODUCT_ID 匹配,因为它在我假设的 @JoinTable 部分中提到。我用相关更改编辑了我的问题。
    • @VivekVardhan 如果您有问题,请提出问题。配合相关代码、解释、测试用例复现问题等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2012-07-15
    • 2019-05-13
    相关资源
    最近更新 更多