当前位置: 首页 > 知识库问答 >
问题:

使用联接表Hibernate一对多,并Hibernate注释

凤衡
2023-03-14

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

这就是为什么我想使用联接表:

  • Hibernate单向一对多关联-为什么连接表更好

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

共有1个答案

曹鹏海
2023-03-14

不要找例子。阅读官方文件:

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

 类似资料:
  • 我有两个表,ComputerNode和Connection。ComputerNode有一个主键< code>nodeid,但连接没有主键。我无法修改表模式。如果它们有一对多的关系,我应该如何创建java POJO?基本上我的目标是做一个像这样的内部连接: 下面是 SQL 表架构。计算机节点表: 连接表: 表之间的关系是一对多的。一个计算机节点可以有多个连接 我已经创建了两个Java的POJO类,但

  • 我有两个多对多关联的表。 DB详细信息:用户-->列[Id,name]

  • 问题内容: 我想使用联接表在两个表之间建立一对多关系。 最后,我想使用Hibernate批注执行此操作。 我找到了一些使用xml映射执行此操作的示例,但没有带注释的示例。 我相信这就是需要创建表的方式 问题答案: 不要寻找例子。阅读官方文档: 另外,请注意,这是单向一对多关联的默认设置。因此,如果默认的表名和列名适合您,您甚至不必提供注释。

  • 问题内容: 考虑以下两个关系: 连接表ATag没有相应的实体类。现在,我想获取所有名为Tag1的Tag的Foo实例,是否可以仅使用Criteria? 子查询可能会有所帮助,但是,我无法为不存在的类ATag.class创建DetachedCriteria。 问题答案: 只是处理这个确切的问题。您在表中而不是对象中思考。只是参考,让Hibernate负责其余的工作: 如果您看到SQL Hibernat

  • 在我的应用程序中,用户和首选项实体之间存在多对多关联。由于连接表需要一个额外的列,因此我必须将其分解为2个一对多的关联: 用户实体: 偏好实体: 用户首选项实体: 为了更新其中一个首选项,我循环浏览用户的一组首选项,并更新值如下: 我已经确认,我试图更新的用户变量在代码运行后确实包含新值。更奇怪的是,当重定向发生时,该值会在网页上更新,但数据库不会更新!这是我用来做更新的代码,这个类用@Trans

  • 我用Hibernate的JPQL查询获取了一个公司实体。该实体与关键字实体有多对多关联。由于联接表有一个额外的列处于活动状态,因此该表已映射到一个公司关键字实体。所以协会是这样的: 公司 现在,来自实体的关联是惰性的,并且它不会被我的JPQL查询初始化,因为我想避免产生笛卡尔产品性能问题。这就是为什么我想在运行JPQL查询后初始化关联,例如: 对于“正常的”多对多关联,这将非常有效,因为所有关联实