没有 list/set 使用 JPA 的 ManyToOne 关系
ManyToOne relation without list/set using JPA
我有一个使用 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() {
}
...
为什么在制造商实体class中没有List/Set和产品(s)? ManyToOne 关系是双向的?为什么这是可能的?制造商如何了解其产品,如何将其保存在数据库中 table?
如果您在数据库级别查看它,table Product
将有类似 manufacturer_id
的东西,它是 Manufacturer
table 的外键。 table 结构在单向和双向映射情况下保持不变。
制造商将通过table Product
和manufacturer_id = <its id>
查询了解其产品。在 JPA 级别,如果是单向映射,您可以通过 from Product p where p.manufacturer.id = :man_id
查询它。在双向映射的情况下,您可以只执行 manufacturer.getProducts()
,但它会转换为相同的 SQL.
一对多关联的多边是可选的。您可以根据需要实施它,或者如果不需要甚至有风险则跳过它。一个制造商可能有数千种产品。一次获取所有这些是没有意义的。最好通过查询加载并使用分页。当然,如果您认为这对您有帮助,您可以将产品集合添加到您的制造商。
为什么制造商实体 class 中没有 List/Set 产品?
因为不需要或被认为有风险。
ManyToOne 关系是双向的?
当然可以。即使关系没有实现,它仍然存在。
为什么这可能?这将如何保存在数据库中 table?
OneToMany 关系始终由一侧的 id 实现。 (在这种情况下,产品中的 ManufacturerId。不需要其他任何东西。即使您实现了产品集合。这不会影响它的持久化方式。
制造商如何了解其产品?
没有。但是当然可以查询数据库。
我有一个使用 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() {
}
...
为什么在制造商实体class中没有List/Set和产品(s)? ManyToOne 关系是双向的?为什么这是可能的?制造商如何了解其产品,如何将其保存在数据库中 table?
如果您在数据库级别查看它,table Product
将有类似 manufacturer_id
的东西,它是 Manufacturer
table 的外键。 table 结构在单向和双向映射情况下保持不变。
制造商将通过table Product
和manufacturer_id = <its id>
查询了解其产品。在 JPA 级别,如果是单向映射,您可以通过 from Product p where p.manufacturer.id = :man_id
查询它。在双向映射的情况下,您可以只执行 manufacturer.getProducts()
,但它会转换为相同的 SQL.
一对多关联的多边是可选的。您可以根据需要实施它,或者如果不需要甚至有风险则跳过它。一个制造商可能有数千种产品。一次获取所有这些是没有意义的。最好通过查询加载并使用分页。当然,如果您认为这对您有帮助,您可以将产品集合添加到您的制造商。
为什么制造商实体 class 中没有 List/Set 产品?
因为不需要或被认为有风险。
ManyToOne 关系是双向的?
当然可以。即使关系没有实现,它仍然存在。
为什么这可能?这将如何保存在数据库中 table?
OneToMany 关系始终由一侧的 id 实现。 (在这种情况下,产品中的 ManufacturerId。不需要其他任何东西。即使您实现了产品集合。这不会影响它的持久化方式。
制造商如何了解其产品?
没有。但是当然可以查询数据库。