如何使用criteriabuilder在选择时加入

ukxgm1gy  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(325)

如何使用criteriabuilder将表与所选内容连接起来?
假设我有这个问题:

SELECT 
    tbl1.*, 
    tbl2.total 
FROM 
    table_1 tbl1 
LEFT JOIN 
    (SELECT col_id AS id, SUM(value) AS total FROM table_2 WHERE active = 1 GROUP BY col_id) tbl2 
ON 
    tbl1.id = tbl2.id;

其中,表1的定义为:

CREATE TABLE table_1(
    id NUMBER(19, 0),
    -- other columns
)

... 和表2。。。

CREATE TABLE table_2(
    id NUMBER(19, 0),
    col_id NUMBER(19, 0),
    value NUMBER(14, 2),

    -- other columns
    FOREING KEY (col_id) REFERENCES table_1(id);
)
sbtkgmzw

sbtkgmzw1#

在root中使用join方法,并使用它从另一个表中获取值。注意:您需要根据这些表(OneOne、manytoone或onetomany)的关系在实体中添加关系。大概是这样的:
实体代码表1:

@OneToOne
private Table2 table2;

搜索代码示例:

(Root<Table1> root, CriteriaQuery<?> query, CriteriaBuilder cb) -> {
           Join<Table1, Table2> joinTable2 = root.join("table2");
           cb.equal(joinTable2.get("active"), 1);
           .. other filters ..
};

相关问题