使用连接表 hibernate 一对多,并 hibernate 注释

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

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

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

  • Hibernate unidirectional one to many association - why is a join table better?
  • Why is it recommended to avoid unidirectional one-to-many association on a foreign key?

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

    最佳答案

    不要寻找例子。阅读 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如果默认表名和列名适合您,则注释。

    关于使用连接表 hibernate 一对多,并 hibernate 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047483/

    相关文章:

    python - Flask-SQLAlchemy 更新一对多记录

    java - MYSQL Hibernate 5.2 createStoredProcedureQuery

    java - 不能用Hibernate调用PostgreSQL的11存储过程

    java - 多bean依赖的测试方法

    hibernate :@GeneratedValue 不起作用?

    java - Spring hibernate : Illegal attempt to associate a collection with two open sessions

    JPA OneToMany 列名

    rest - 设计一个 RESTful api,用于一次创建资源及其相关资源

    java - 延迟初始化@ManyToMany。错误是什么?

    java - 为 'between' 字符串创建 Hibernate 限制