微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 JPQL 查询来计算表中的值并与其他表相关数据结合?

如何解决如何使用 JPQL 查询来计算表中的值并与其他表相关数据结合?

我有两个表 X 和 Y。在表 X (Oracle sql) 中,沿着 X 表中其他列的唯一列(主键)代码.. 代码列可能在表 Y 中有一些具有列 code_id 的记录。我想获取表 Y 中包含代码和表 Y 中其他列的代码的行数

并且我有 springboot entity Entity 我想将结果映射到使用 jpql 所以我想在 JPQL 中查询

public class Entity  {

    private int id;
    private char code;
    private String name;
//   constructor & setters / getters
}

和Y表有实体Counter

public class Counter {
        private int codeid;
       }

我想使用相当于这个 Oracle sql 查询的 jpql 查询

select x.*,(select count(*) from Y y where x.code = y.code_id) as theCount
from X x  ORDER BY theCount desc,x.name_ON asc ;

示例:

代码“A”有3个条目,代码“B”有2个条目,代码“C”在表Y中有0个条目。

 code   name    count   
    A     name1    3
    B     name2    2
    C     name3    0 

解决方法

我做了一些假设,因为我想念你的项目代码。希望我的例子能满足你的需求。它不是同一个 SQL,但它仍然只是 1 个产生相同类型输出的语句。

具有 Code 集合的主要实体 Counter

@Data
@Entity
public class Code {
    @Id
    private Integer id;
    private String code;
    private String name;
    @OneToMany
    @JoinColumn(name = "CODE_ID")
    private List<Counter> counterList;
}
@Data
@Entity
public class Counter {
    @Id
    private Integer id;
}

Spring 数据存储库:

public interface CodeRepository extends JpaRepository<Code,Integer> {
    @Query("select c.code,c.name,count(l) as amount from Code c join c.counterList l group by c.code,c.name")
    List<Object[]> getSummary();
}

它返回:

A,TESTNAME1,3
B,TESTNAME2,2

如果将以下内容插入到数据库中:

INSERT INTO CODE (ID,CODE,NAME) VALUES (1,'A','TESTNAME1');
INSERT INTO COUNTER (ID,CODE_ID) VALUES (123,1);
INSERT INTO COUNTER (ID,CODE_ID) VALUES (124,CODE_ID) VALUES (125,1);

INSERT INTO CODE (ID,NAME) VALUES (2,'B','TESTNAME2');
INSERT INTO COUNTER (ID,CODE_ID) VALUES (234,2);
INSERT INTO COUNTER (ID,CODE_ID) VALUES (235,2);

结果是这样产生的:

codeRepository.getSummary()
    .forEach(sum -> System.out.println(sum[0] + "," + sum[1] + "," + sum[2]));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。