0

(私はOracleとJPAを使用しています(Java EE 5、WebSphere 7から))。

Project クラスがあり、Project にはタスクのリストがあります。

各タスクにはシーケンス番号があるため、タスクの順序 (Task.seq)、割り当てられたユーザー (Task.userId)、および文字列ステータス Task.status (「IN_PROGRESS」または「COMPELTE」) を判別できます。プロジェクトのタスクは、割り当てられたユーザーによって番号順に「完了」されます。

私の問題は...これはトリッキーなビットです...次のことを行うクエリが必要です:

ユーザー ID を指定して、そのプロジェクトの現在のタスクがユーザーに割り当てられているすべてのプロジェクトを検索します。(「現在のタスク」は、ステータスが「IN_PROGRESS」である番号順に見つかった最初のタスクです。)

私は SQL が苦手で、JPA は初めてです。助けてください。

PS。たとえば、現在使用しているクエリは、タスク リストが入力されたすべての Project オブジェクトを取得します。

select distinct p from Project p left join fetch p.taskList

どんな助けでも大歓迎です!

ロブ

4

2 に答える 2

1

何かのようなもの:

Select p from Project p join p.tasks t where t.user = :user and t.seq = (Select min(t2.seq) from Task t2 where t2 = t and t2.status = 'IN_PROGRESS')
于 2012-05-15T13:07:19.883 に答える
0

これについて考えるには、ユーザーの最初のタスクを見つけることから始めます。次に、プロジェクト情報に参加し、プロジェクトについて知りたいことを選択します。

select distinct p.*
from (select userid, projectid, min(t.seq) as firstseq
      from Task t
      where t.userid = <userid> and 
            t.status = 'IN PROGRESS'
      group by userid, projectid
     ) u join
     Task t
     on t.projectid = u.projectid and
        t.seq = u.firstseq join
     Project p
     on p.projectid = u.projectid

明示的には言っていませんが、タスクにはプロジェクト ID があると想定しています。

このソリューションは、ほぼすべてのデータベースで機能するはずです。

于 2012-05-14T20:07:55.467 に答える