2017-07-07 131 views
1

休眠映射 如何實現這樣的代碼?休眠映射只有一個類

每家公司有兩個屬性,它們是公司名稱和估計的年收入。 有兩種類型的公司: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 
} 
+1

首先,你班裏的@ @ Entity是哪裏?你有嘗試過嗎?展示下。你會得到什麼錯誤? –

+0

如何實現這樣的代碼 - 簡單,接受代碼 - 在這裏你執行它 – Antoniossss

+0

你能詳細說明你到底想做什麼嗎? –

回答

0

在你實現你應該使用:

  • @Entity標註在你的職業等級,以便實體可以保存到數據庫中。
  • @Column具有companyNameestimatedAnnualEarnings屬性的註釋,因此它們可以作爲數據庫中的列持久化。
  • @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場對mainCompanysubsidiaryCompaniysubsidiaryCompanies爲更好的可讀性 和使其更好地符合邏輯。
  • 如果你想給你的實體在數據庫中一個不同的名稱,你 應該在一流水平與 @Entity註釋使用@Table(name="differentName"),與列SMAE件事你可以 name屬性添加到@Column註釋即 @Column(name="company_name")如果你想要不同的名字。