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 注解,所以实体可以持久化到数据库。
  • 具有 companyNameestimatedAnnualEarnings 属性的 @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 并且 subsidiaryCompaniysubsidiaryCompanies 以获得更好的可读性 并使其更符合逻辑。
  • 如果你想在数据库中给你的实体一个不同的名字,你 应该在 class 级别使用 @Table(name="differentName") @Entity 注释,您可以添加列的小东西 name 属性 到 @Column 注释即 @Column(name="company_name") 如果你想要不同的名字。