发布JPA声明;翻译“;

发布JPA声明;翻译“;,jpa,eclipselink,jpql,Jpa,Eclipselink,Jpql,我有一份JPA声明,是这样的 select p from Proposal p where p.creationTime > :startDate AND p.creationTime < :stopDate AND ((p.owner = :owner) OR (:member MEMBER OF p.sharedWithTeam.members)) ORDER BY p.creationTime DESC 从方案p中选择p,其中p.creationTime>:startDate

我有一份JPA声明,是这样的

select p from Proposal p where p.creationTime > :startDate AND p.creationTime < :stopDate AND ((p.owner = :owner) OR (:member MEMBER OF p.sharedWithTeam.members)) ORDER BY p.creationTime DESC
从方案p中选择p,其中p.creationTime>:startDate和p.creationTime<:stopDate和((p.owner=:owner)或(:p.sharedWithTeam.members的成员))按p.creationTime描述排序
但它从未产生任何结果。我用日食

在深入研究生成的SQL之后,我发现它将查询转换为一些永远不可能为真的东西

SELECT XXX FROM userteam_users t3, USERTEAM t2, USERS t1, PROPOSAL t0 WHERE ((((t0.CREATIONTIME > ?) AND (t0.CREATIONTIME < ?)) AND ((t0.OWNER_username = ?) OR (? = t1.username))) AND ((t2.ID = t0.SHAREDWITHTEAM_ID) AND ((t3.teams_ID = t2.ID) AND (t1.username = t3.members_username)))) ORDER BY t0.CREATIONTIME DESC LIMIT ? OFFSET ?
从用户团队\用户t3、用户团队t2、用户t1、提案t0中选择XXX,其中(((t0.CREATIONTIME>?)和(t0.CREATIONTIME<?)和((t0.OWNER \用户名=?)或(?=t1.username)))和((t2.ID=t0.SHAREDWITHTEAM \ ID)和((t3.Team \ ID=t2.ID)和(t1.username=t3.members \用户名)))按t0.CREATIONTIME描述限制排序?抵消?
(我只包括from和where条款,以使其更短…)

我看不出我的JPQL查询有什么问题。这可能是我用的“或”吗?还是我对条件成员的“大胆”使用

编辑:事实上,这句话可能是真的,我看错了。但是我有没有共享用户团队的提案,所以在这种情况下,第一个条件总是错误的,应该是正确的(在我看来)


谢谢

嗯,我认为问题出在的成员身上,所以我把它转过来,将“OR(:p.sharedWithTeam.members的成员)”替换为“(p.sharedWithTeam不为NULL,p.sharedWithTeam IN:userTeams)。这确实有效。你可以回答自己的问题。因此,人们将知道你是如何找到答案的,而无需阅读评论部分。好吧,我认为问题在于的成员,因此我将其转过来,并将“或(:p.sharedWithTeam.members)”替换为“(p.sharedWithTeam不为NULL,p.sharedWithTeam IN:UserTeam). 那确实有效。你可以回答你自己的问题。因此,人们不需要阅读评论部分就可以知道你是如何找到答案的