Получите данные из нескольких таблиц, используя одну таблицу сопоставления в Spring Boot - PullRequest
0 голосов
/ 24 января 2020

Процедура. java

@Entity
@Table(name = "procedures")
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class Procedure implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ProcedureId")
    private int id;

    @Column(name = "ProcedureName")
    private String name;
    @Column(name = "ProcedureCode")
    private String code;

    @Column(name = "ProcedureDesc")
    private String desc;
//  getters and setters
}

CPTClinicianDescriptor

@Entity
@Table(name = "cliniciandescriptor")
public class CPTClinicianDescriptor {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "Id")
    private int id;

    @Column(name = "ConceptId")
    private int conceptId;

    @Column(name = "CPTCode")
    private String cptCode;

    @Column(name = "ClinicianDescriptorId")
    private int clinicianDescriptorId;


    @Column(name = "ClinicianDescriptor")
    private String clinicianDescriptor;
//  getters and setters
}

CPTProcedures

@Entity
@Table(name = "cptprocedures")
public class CPTProcedures {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "Id")
    private int Id;

    @OneToOne(fetch=FetchType.EAGER)
    @JoinColumn(name = "ProcedureId")
    private Procedure procedure;
    @Transient
    private int procedureId;

    @OneToOne(fetch=FetchType.EAGER)
    @JoinColumn(name = "CPTCodeSet")
    private CPTClinicianDescriptor cptClinicianDescriptor;
    @Transient
    private int cptCodeSet;
//  getters and setters
}

Здесь у меня есть 3 таблицы в mySql, в этих 2 разных таблицах, я создал одну таблицу для отображения, которая имеет внешние ключи процедур и CPT, когда я получаю список с использованием процедуры. Она также должна получить соответствующие данные cpt .

ServiceImpl Как:

public List<Procedure> getCombinedProcedureList(int id) {
        // TODO Auto-generated method stub
        List<Procedure> pList = new ArrayList<Procedure>();
        Procedure procedureList = procedureRepository.findCombById(id);
        pList.add(procedureList);
        return pList;
    }

Когда я использую Репозиторий подобно

@Query(value = "SELECT * FROM procedures JOIN cliniciandescriptor ON cliniciandescriptor.Id  = ?1",nativeQuery = true)
Procedure findCombById(int id);

этот запрос в репозитории процедур это получение только процедур. Итак, что я могу сделать, чтобы получить объединенный (объединенный) список из 2 (процедур и CPT) таблиц с использованием 3-й таблицы сопоставления.

...