Java 休眠一对多:实体应该包含外键还是整个对象
我正在努力学习HibernateAPI。我很难处理人际关系以及如何利用人际关系 考虑下面的例子。 我们有两张桌子,主人和汽车。我们假设一辆汽车只能由一个人拥有,因此汽车与车主之间存在多对一的关系 现在,一个常规的SQL数据库应该是这样的Java 休眠一对多:实体应该包含外键还是整个对象,java,hibernate,Java,Hibernate,我正在努力学习HibernateAPI。我很难处理人际关系以及如何利用人际关系 考虑下面的例子。 我们有两张桌子,主人和汽车。我们假设一辆汽车只能由一个人拥有,因此汽车与车主之间存在多对一的关系 现在,一个常规的SQL数据库应该是这样的 |------------| |------------| | Owner | 1 ------------------- N | Car | |------------|
|------------| |------------|
| Owner | 1 ------------------- N | Car |
|------------| |------------|
| id | | id |
| name | | model |
|------------| | car_id |
|------------|
现在最困难的部分是当我试图用Anotation写实体时
尤其是汽车实体
我的问题有两个:
1.汽车类实体应该有一个名为carId的长字段,还是应该是一个所有者字段
2.我还应该在两个实体中都包含一对多和多对一关系,还是只需要一个
提前感谢您。因此您应该使用Owner作为类型,如果您想访问车主和车主的汽车,您必须在这两个类中设置关系
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 */
}
公车{
@Id私有int-Id;
@许多私人业主;
私有字符串模型;
/**接球手和接球手*/
}
公共类所有者{
@Id私有int-Id;
私有字符串名称;
@OneToMany私家车;
/**接球手和接球手*/
}
你们之间应该有双向关系,比如:
/*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;
}
/*与普通车车主的多对一关系*/
公车{
@身份证
私有int-id;
@许多酮
私人业主;
}
/*与同级别车主的一对多关系*/
公共类所有者{
@身份证
私有int-id;
@OneToMany(mappedBy=“所有者”)
私家车名单;
}
在提供的关系主实体中,实体是所有者。现实生活中,车主可以拥有多辆车。在这种情况下,每辆车都应该引用所有者(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;
}
公共类所有者{
@独身癖
私家车名单;
}
双向传输的示例:
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;
}
公共类所有者{
@OneToMany(mappedBy=“所有者”)
私家车名单;
}
公车{
@许多酮
私人业主;
}
我想汽车
应该有一个车主id
而不是汽车id
。原因:我想你应该用它来表示外键,因为Car
已经有id
作为主键了。现在,我希望外键以外部实体命名,即Owner
。整数ID是一种数据库黑客,用于加速查询,而不是对象模型的一级部分。对象模型中的关系是对象类型之间的关系,而不是它们的人工ID,如这里的答案所示。实体equals
和相关方法(hashCode
等)应根据对象的键值或数据库术语自然键编写。请再解释一下;您的答案主要是codeNote,mappedBy
属性如何通知JPA/Hibernate,Owner.cars
是Car.Owner
的对应项,cars
集合可以通过与正确的所有者收集所有Car
实例来建立。