hibernate - 如何读取Hibernate中实体之间的一对多或多对一关系?

标签 hibernate jpa one-to-many many-to-one

我正在学习hibernate并试图了解如何建立两个实体之间的关系(OneToOneOneToManyManyToMany)。考虑一个简单的场景:

用户实体:

@Entity
class User {
    @Id
    private userId;

    private Vehicle vehicle;

    // other code
}

车辆实体:

@Entity
public class Vehicle {
    @Id
    private int vehicleId;
    private String desc;

    // other code
}

我的目标是指定:

用户车辆实体之间的一对多关系一对一关系。

我知道有 OneToOneOneToMany 注释,但我无法理解这种关系是如何解释的?它取决于另一个实体放置在哪个实体中吗?

例如:

 @Entity
class User {
    @Id
    private userId;

    private Vehicle vehicle;

    // other code
}

正如我们所看到的,我已将 Vehicle 实体放置在 User 实体内,并且如果我在 之上使用 OneToMany 注释>Vehicle 实体,是否表示 User -> Vehicle 实体之间的 1:M 关系。

谁能帮我理解这个?

最佳答案

我将以此作为更好地解释的答案,但请记住,这些实际上是 hibernate 映射的基础,您可能可以在任何在线教程中阅读它们。

用户表为:

userId   userName   etc

车辆表是

vehicleId   userIdFK  etc

这是一种明显的一对多关系:一个用户多个车辆。

要映射您所拥有的这种关系

@Entity
class User {
    @Id
    private userId;

    private String userName

    // other code
}

@Entity
pubic class Vehicle {
    @Id
    private int vehicleId;
    private String desc;

    @ManyToOne
    @JoinColumn(name = "userIdFK", referencedColumnName = "userId")
    private User user;
    // other code
}

这就是所谓的单向映射,您只需让 hibernate 了解数据库上 FK 的存在即可

@ManyToOne 指定关系类型(一辆车属于一个用户)

而 @JoinColumn 用于表示“嘿,hibernate Vehicle 表对 User 表有一个 FK”,名称和referencedColumnName 是 Fk 中涉及的数据库列名称。

如果您愿意,您可以将中继设置为双向,这有时很有用,您可以从关联的非拥有方添加引用(在本例中是从用户到车辆),这样您就可以从两个类到另一个类

@Entity
class User {
    @Id
    private userId;
    private String userName

    @OneToMany(mappedBy = "user")
    private List<Vehicle> vehicleList;
    // other code
}

MappedBy 必须指定映射关系的其他字段

关于hibernate - 如何读取Hibernate中实体之间的一对多或多对一关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47944041/

相关文章:

java - 在使用 JPA 映射类时,为什么有人要在 getter 或 setter 上添加注释?

java - @ManyToOne(optional=false) 与 @Column(nullable=false) 有什么区别

java - JPA实体生命周期方法

mysql - 加入一对多

java - Hibernate 标准 - 新手问题

java - JPA Hibernate 查询与 native 查询

angularjs - Spring + Hibernate + Angular + Maven + Tomcat 项目文件夹结构问题

java - 有没有一种方法可以在 Hibernate 中加载对象而无需编写查询或具有 ID?

python - 数据存储中的一对多关系

java - Hibernate 5 Java双向oneToMany字段为空但表包含数据