java - 使用 JPA 没有列表/集合的 ManyToOne 关系

标签 java hibernate jpa many-to-one

我有一个使用 hibernate 的新 JPA 项目,我在阅读它的代码时遇到了困难。我看到了:

@Entity
public class Product {

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Manufacturer manufacturer;

...
}

和另一个实体

@Entity
public class Manufacturer{

 private ManufacturerId manufacturerId;

    private String name;

    private Manufacturer() {
    }
...

为什么 Manufacturer 实体类中没有 List/Set with Product(s)? ManyToOne 关系是双向的?为什么这是可能的?制造商如何了解其产品,如何将其保存在数据库表中?

最佳答案

一对多关联的多边是可选的。您可以根据需要实现它,或者如果不需要甚至有风险则跳过它。一个制造商可能有数千种产品。一次获取所有这些是没有意义的。最好通过查询加载并使用分页。当然,如果您认为这对您有帮助,您可以将产品集合添加到您的制造商。

  • 为什么在 Manufacturer 实体类中没有 List/Set with Product(s)?

    因为不需要或被认为有风险。

  • ManyToOne 关系是双向的?

    当然可以。即使关系没有实现,它仍然存在。

  • 为什么这是可能的?这将如何保存在数据库表中?

    OneToMany 关系始终由一侧的 id 实现。 (在这种情况下,产品中的 ManufacturerId。不需要其他任何东西。即使您实现了产品集合。这不会影响它的持久化方式。

  • 制造商如何了解其产品?

    事实并非如此。但是当然可以查询数据库。

关于java - 使用 JPA 没有列表/集合的 ManyToOne 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27902409/

相关文章:

Java 等效于产生相同输出的 JavaScript 的 encodeURIComponent?

java - 命名参数不遵循 MySQL/SQL/JPQL 查询中的 java 标识符规则

java - Spring boot - 在创建时设置动态属性

java - 如何使用 Spring Boot 将数据从一个 html 表单传递到多个表

java - JPA 支持外连接,无需对象关系映射

java - 持久化实体时出现 SQLServerException - 索引超出范围

java - 可调用和泛型的集合

java - Espresso UI 测试无法识别 onView()

mysql - 使用 wampserver 的 jpa 项目无法将任何内容放入数据库

Hibernate 在某些情况下忽略属性