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

时间:2017-12-22 15:43:28

标签: 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
}

我的目标是指定:

One to Many relationshipOne to one个实体之间的

UserVehicle关系。

我知道有OneToOneOneToMany注释,但我无法理解这种关系是如何解释的?它取决于其他实体所在的实体吗?

例如:

 @Entity
class User {
    @Id
    private userId;

    private Vehicle vehicle;

    // other code
}

正如我们所看到的,我已将Vehicle实体放在User实体中,如果我在OneToMany实体顶部使用Vehicle注释,它是否意味着1 :User - >之间的M关系Vehicle实体。

任何人都可以帮我理解这个吗?

1 个答案:

答案 0 :(得分:2)

我将这个答案更好地解释,但请记住,这些是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知道db上是否存在FK

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

虽然@JoinColumn用于说“hey hibernate Vehicle table有一个FK朝向User表”,名称和referencedColumnName是Fk中涉及的db列名。

如果你想要你可以将继承作为双向进行,这对于你从协会的非拥有方(在这种情况下从用户到车辆)添加引用时很有用,这样你就可以从两个类到另一个类

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

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

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