Hibernate one to many:实体是否应包含外键或整个对象

时间:2017-06-01 21:37:59

标签: java hibernate

我正在尝试学习hibernate api。我在关系方面遇到困难,应该如何就业。

考虑以下示例。 我们有两个表,车主和汽车。我们假设汽车只能由一辆汽车拥有,因此汽车与车主有多对一的关系。

现在常规SQL数据库看起来像这样。

|------------|                         |------------|
|   Owner    | 1 ------------------- N |    Car     |
|------------|                         |------------|
|    id      |                         |     id     |
|    name    |                         |    model   |
|------------|                         |   car_id   |
                                       |------------|                 

现在,当我尝试使用Anotations编写实体时,困难就出现了。

特别是Car实体。

我的问题是两个:

1.汽车类实体应该有一个名为carId的字段,还是所有者所有者字段?

2.我也应该在两个实体中包含一对多和多对一的关系,或者只需要一个。

提前谢谢。

3 个答案:

答案 0 :(得分:2)

你应该彼此有双向关系,如:

/*Many to one relationship with owner in class Car*/
public class Car {
  @Id 
  private int id;

  @ManyToOne 
  private Owner owner;

}

/*One to many relationship with car in class Owner*/

public class Owner {
  @Id 
  private int id;

  @OneToMany(mappedBy="owner") 
  private List<Car> cars;
}

答案 1 :(得分:0)

所以你应该使用所有者作为类型,如果你想访问车主和车主的汽车,你必须在两个类中设置关系。

public class Car {
  @Id private int id;
  @ManyToOne private Owner owner;
  private String model;
  /** getters and setters */

}


public class Owner {
  @Id private int id;
  private String name;
  @OneToMany private List<Car> cars;

  /** getters and setters */

}

答案 2 :(得分:0)

在提供的关系中,主实体是所有者。而作为现实生活中的例子,车主可以拥有多辆车。在这种情况下,每辆车都应该引用所有者(owner_id),或者您可以使用关系表。您可以指定单向映射或双向映射。

单向示例:

public class Owner {
    @OneToMany
    private List<Car> cars;
}

双向示例:

public class Owner {

    @OneToMany(mappedBy = "owner")
    private List<Car> cars;
}

public class Car {
    @ManyToOne
    private Owner owner;
}