我正在寻找一些支持,以将以下本机SQL转换为基于CriteriaBuilder的查询,我们可以使用其他动态WHERE子句对其进行扩展。
在mariaDB数据库上工作的基本SQL如下:
SELECT vs.*
FROM view_sources as vs
JOIN (
SELECT _cow_root_id as root,max(_cow_state_date) as state_date
FROM sources
WHERE owner_id='project-1' and (_cow_state_date < '1980-07-05' or _cow_state_date is null)
GROUP BY _cow_root_id
) AS latest ON vs._cow_root_id=latest.root and (vs._cow_state_date=state_date or _cow_state_date is null)
基本上,内部查询查找源表。该表具有源实体,当修改某些特定字段时,de system将对原始记录进行COW(写入时复制),并使用更改后的字段以及与记录的上一个和下一个ID关联的引用来创建新记录。
原始的第一个记录ID被存储在所有“ cowed”记录中,因此我们可以将它们分组在一起(_cow_root_id)。
目标是要有一个记录列表,其中记录在特定的日期有效。内部查询对'project-1'拥有的所有记录执行此操作,并选择最新记录,或者在未完成操作时(_cow_state_date为null),此子查询与源视图一起加入以获取此集合的所有详细信息字段来源基于_cow_root_id和特定的state_date。
我面临的主要问题是在多个字段(root和state_date)上的联接。在subQuery中似乎没有办法做到这一点?