我目前有一个带有一堆过滤器的查询,使用Criteria API是有意义的,不幸的是,我有一个使用字符串值而不是关系的Join查询。这是一个查询示例:
SELECT ua.id, COALESCE(uf.status, f.status) AS status, r.name, ua.companyname, ua.firstname, ua.lastname, ua.usergroup, ua.email, ua.country, ua.continent FROM useraccount ua JOIN userrole ur on ua.id = ur.userid JOIN role r on ur.roleid = r.id and r.eventgroupid = 1 JOIN feature f on f.name = 'Locked' LEFT JOIN userfeature uf on uf.featureid = f.id AND uf.userid = ua.id;
正如您所看到的,查询的问题是我想使用COALESCE操作获取UserFeature(如果存在),如果不存在,则使用Feature表中的默认状态。
功能表只是一个简单的id、名称和状态表,它只与UserFeature相关,UserFeature覆盖了全局“feature”,仅为单个用户使用。
正如您可能猜测的那样,CriteriaAPi不允许加入<>;通过常规字符串值。我一直在思考如何更改select语句,使其更符合CriteriaAPI提供的内容,但我没有找到任何相关信息。
我正在使用PostgreSQL和Hibernate 5.4.32(通过使用spring starter jpa)