Hibernate 映射只有一个 class
Hibernate Mapping Only one class
休眠映射
如何实现这样的代码?
每个公司都有两个属性,分别是公司名称和预计年收入。
有两种类型的公司:1- 主公司,2- 子公司。
公司可以只属于一个公司,但可以有几个子公司。
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String companyName;
private double estimatedAnnualEarnings;
private Company company; // here need to do a @OneToOne
private List<Company> subsidiaryCompany; // here need to do a @OneToMany
}
在你的实现中你应该使用:
- 你的 class 级别的
@Entity
注解,所以实体可以持久化到数据库。
- 具有
companyName
和 estimatedAnnualEarnings
属性的 @Column
注释,因此它们可以作为列保存在数据库中。
@ManyToOne
注解加上company
字段,所以可以映射自引用关系。
subsidiaryCompany
列表也是如此,它也需要用 @OneToMany
注释映射才能建立关系。
你的代码应该是这样的:
@Entity
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column
private String companyName;
@Column
private double estimatedAnnualEarnings;
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="mainCompanyId")
private Company mainCompany;
@OneToMany(mappedBy="mainCompany")
private List<Company> subsidiaryCompanies;
//getters and setters goes here
}
备注
- 我将
company
字段的名称更改为 mainCompany
并且
subsidiaryCompaniy
到 subsidiaryCompanies
以获得更好的可读性
并使其更符合逻辑。
- 如果你想在数据库中给你的实体一个不同的名字,你
应该在 class 级别使用
@Table(name="differentName")
@Entity
注释,您可以添加列的小东西
name
属性 到 @Column
注释即
@Column(name="company_name")
如果你想要不同的名字。
休眠映射 如何实现这样的代码?
每个公司都有两个属性,分别是公司名称和预计年收入。 有两种类型的公司:1- 主公司,2- 子公司。 公司可以只属于一个公司,但可以有几个子公司。
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String companyName;
private double estimatedAnnualEarnings;
private Company company; // here need to do a @OneToOne
private List<Company> subsidiaryCompany; // here need to do a @OneToMany
}
在你的实现中你应该使用:
- 你的 class 级别的
@Entity
注解,所以实体可以持久化到数据库。 - 具有
companyName
和estimatedAnnualEarnings
属性的@Column
注释,因此它们可以作为列保存在数据库中。 @ManyToOne
注解加上company
字段,所以可以映射自引用关系。subsidiaryCompany
列表也是如此,它也需要用@OneToMany
注释映射才能建立关系。
你的代码应该是这样的:
@Entity
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column
private String companyName;
@Column
private double estimatedAnnualEarnings;
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="mainCompanyId")
private Company mainCompany;
@OneToMany(mappedBy="mainCompany")
private List<Company> subsidiaryCompanies;
//getters and setters goes here
}
备注
- 我将
company
字段的名称更改为mainCompany
并且subsidiaryCompaniy
到subsidiaryCompanies
以获得更好的可读性 并使其更符合逻辑。 - 如果你想在数据库中给你的实体一个不同的名字,你
应该在 class 级别使用
@Table(name="differentName")
@Entity
注释,您可以添加列的小东西name
属性 到@Column
注释即@Column(name="company_name")
如果你想要不同的名字。