当前位置: 代码迷 >> java >> 如何使用休眠JPA注释连接两列
  详细解决方案

如何使用休眠JPA注释连接两列

热度:33   发布时间:2023-07-26 13:53:00.0

我有以下三个关系

用户表

@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,但我还希望公司名称,来自company表的克隆在项目表中? 如何在两列(user_id和company_id)上加入用户表和项目表,我希望company_name是Company表中的name列

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

  1. 一个用户拥有零个或一个公司
  2. 一个用户有零个,一个或多个项目
  3. 项目表为用户保存一个外键(user_id);
  4. 公司表持有user的外键(user_id)。

我认为您可以定义以下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();
  相关解决方案