如何使用hibernate JPA注释连接两列

时间:2015-08-08 12:45:59

标签: java mysql hibernate jpa

我有以下三种关系

用户表

@OneToMany(mappedBy="user",fetch = FetchType.EAGER,cascade = CascadeType.ALL)
    @SortNatural
    SortedSet<Project> projects;

    @OneToOne(cascade= CascadeType.ALL)
    Company company;

项目:

@ManyToOne
    User user;
    String company_name;

公司:

@OneToOne(mappedBy = "company")
    User user;
    String name;

这在Projects表中给了我一个user_id但是我也想要公司名称,公司表中的cloumn在项目表中?如何在两列(user_id和company_id)上加入用户表和项目表我希望company_name是Company表中的名称列

1 个答案:

答案 0 :(得分:0)

考虑到您使用的是这样的模型:

  1. 一个用户有零个或一个公司;
  2. 一个用户有零个,一个或多个项目;
  3. 项目表包含用户的外键(user_id);
  4. 公司表格中包含用户的外键(user_id)。
  5. 我认为您可以定义以下JPA映射:

    //User table
    @Id
    Long id; 
    @OneToMany(mappedBy="user",fetch=FetchType.EAGER, cascade=CascadeType.ALL)
    @SortNatural
    SortedSet<Project> projects;
    
    @OneToOne(mappedBy="user", fetch=FetchType.EAGER, cascade= CascadeType.ALL)
    Company company;
    
    //Project table
    @Id
    Long id;
    @ManyToOne
    @JoinColumn(name="user_id")
    User user;
    
    //Company table
    @Id
    Long id;
    @OneToOne
    @JoinColumn(name="user_id")
    User user;
    String name;
    

    这样,在检索项目p后,您可以获得公司的名称:

    Project p = ... // code to select a project
    String companyName = p.getUser().getCompany.getName();