我有使用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() {
}
...
为什么制造商实体类中没有产品的列表/设置? ManyToOne 关系是双向的?为什么这可能?制造商如何了解其产品,如何将其保留在数据库表中?
答案 0 :(得分:1)
如果您在数据库级别查看它,表Product
将具有类似manufacturer_id
的内容,它是Manufacturer
表的外键。在单向和双向映射的情况下,表结构保持不变。
制造商将通过使用Product
查询表manufacturer_id = <its id>
来了解其产品。在JPA级别,如果是单向映射,您可以通过from Product p where p.manufacturer.id = :man_id
进行查询。在双向映射的情况下,您可以执行manufacturer.getProducts()
,但它会转换为相同的SQL。