0

让我们考虑以下几点:

@Entity
@Table(name="person")
public class Person implements Serializable {

  @Id
  @GeneratedValue
  @Column(name="id")
  private int id;

  @Column(name="firstName")
  private String firstName;

  @Column(name="lastName")
  private String lastName;

  ...getters/setters...

}

@Entity
@Table(name="car")
public class Car implements Serializable {

  @Id
  @GeneratedValue
  @Column(name="id")
  private int id;

  @Column(name="brand")
  private String brand;

  @Column(name="model")
  private String model;

  @Column(name="personId")
  private String personId;

  ...getters/setters...

}

假设用户要订阅并输入他的个人信息,例如名字、姓氏、汽车品牌以及汽车型号。

我不希望此人的个人信息与汽车信息存储在同一个表中。

我也希望能够用 检索汽车信息personId,这就是我personId在 Car 类中的原因。

我应该使用哪些注释来实现这一点?显然我需要对Car表进行约束并创建personId一个外键,对吗?什么是最好的方法?

我见过不同的东西,什么是最好的?

4

2 回答 2

1

在 Car 类中,替换

@Column(name="personId")
private String personId;

@ManytoOne(fetch = FetchType.LAZY)
@CJoinColumn(name="person")
private Person person;

在 Person 类中,添加

@OneToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE})
private List<Car> cars;

您现在正在形成双向,one-to-many这意味着您可以检索人和汽车的人(所有者)的汽车。

级联允许在保存人员时保存或更新汽车。当人员被移除时,所有汽车也会被删除。

于 2013-01-27T06:42:40.587 回答
0

这取决于您的要求。如果你想为多个用户使用同一个车辆,那么你应该把它变成一个实体,并使用多对多的关系。

如果您根本不想更改实体结构,而只是数据库映射然后查看@SecondaryTable注释@SecondaryTables,它们为实体定义了更多表,然后您应指定每列使用哪个表(否则它们被分配到主表)。

于 2013-01-27T06:52:47.613 回答