spring 如何从2个实体中检索单个结果

mwg9r5ms  于 2023-05-27  发布在  Spring
关注(0)|答案(2)|浏览(402)
| Report1 | Report2   |
| ------  | --------  |
| sid     | sid       |
| name    | name      |
| salary  | department|
report1.sid == report2.sid

我的目标是一起查看2个不同实体数据的结果。两个sid报告对于用户来说都是相同且唯一的。我想显示的结果是sid,姓名,工资,部门。我可以单独查看它们,因为我使用findAll(),但是我希望在一个findAll()中找到所有数据,我曾尝试使用连接列,但是它向我的数据库表添加了另一列。

Entity
Report1
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Data
@Entity
@Table(name = "REPORT1")
public class Report1 {
    @Id
    private String SID;
    private String NAME;
    private double AMOUNT;
}
-------------------------------
Report2
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Data
@Entity
@Table(name = "REPORT2")
public class Report2 {
    @Id
    private String SID;
    private String DEPARTMENT;
    private String NAME;
}

回购

public interface Report1Repository extends JpaRepository<Report1,Integer> {
}
public interface Report1Repository extends JpaRepository<Report2,Integer> {
}
4szc88ey

4szc88ey1#

创建自定义类,如DTO或VO来表示所有数据,并创建自定义查询,返回所有记录并相应地准备DTO列表

mm9b1k5b

mm9b1k5b2#

你可以使用tuple和自定义查询,像这个例子:对于您的存储库:

public interface Report1Repository extends JpaRepository<Report1,Integer> {
@Query(native=true, value='select r1.sid sid, r1.name name, r1.salary salary, r2.department department from report1 r1 left join report2 r2 on r1.sid = r2.sid')
List<ReportTuple> findAllReports();
}

创建一个元组接口,如下所示:

public interface ReportTuple{
    
    Long getSid();
    String getName();
    String getDepartment();
    Long getSalary();
    
    }

相关问题