如何读取 Hibernate 中实体之间的 OneToMany 或 ManyToOne 关系?

How to read OneToMany or ManyToOne relationship between entities in Hibernate?

我正在学习 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
}

我的目标是指定:

One to Many relationshipOne to one UserVehicle 实体之间的关系。

我知道有 OneToOne , OneToMany 注释,但我不明白这种关系是如何解释的?它取决于另一个实体放置在哪个实体中吗?

例如:

 @Entity
class User {
    @Id
    private userId;

    private Vehicle vehicle;

    // other code
}

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

谁能帮我理解一下?

我会把这个作为一个答案来更好地解释,但请记住,这些实际上是休眠映射的基础,您可以在任何在线教程中阅读它们。

用户 table 是:

userId   userName   etc

和车辆 table 是

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 知道 db 上存在 FK

@ManyToOne 指定关系类型(一车一用户)

而@JoinColumn 用于表示 "hey hibernate Vehicle table has a FK towards User table" 名称和 referencedColumnName 是 Fk 中涉及的数据库列名称。

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

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

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

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