1

JPAを使用して、特定のアクションタイプのすべてのログオブジェクトを選択したいと思います。ログオブジェクトからユーザー(log.getUser())を取得したいのですが、ユーザーが結果リストに数回表示されます。で試してみましたdistinctが、うまくいきませんでした。定義できなかったので、正確に何をする必要があるのでしょうかdistinct。これが私のJPAクエリです:

SELECT DISTINCT log 
  FROM Log AS log JOIN log.action AS action 
              JOIN log.user AS user 
 WHERE action.actionType = :actionType

私が言うならSELECT DISTINCT user、私は最後にログオブジェクト全体を持っていません。

ヘルプやヒントをいただければ幸いです。

編集: 私のログクラスの一部:

public class Log {

    private int logId;
    private Calendar logDate;
    private User user;
    private Action action;
    private String description;
    ....
}
4

1 に答える 1

2

2つのクエリソリューション

Logオブジェクトとオブジェクトが必要なdistinct Userため、2つのクエリを実行できます。1つはLogオブジェクトを取得するためのもので、もう1つはオブジェクトを取得するためのdistict Userものです。

// first one to select Log objects
String logQuery = "SELECT l FROM Log l WHERE l.actionType = :actionType";
...
List<Log> logs = logJpaQuery.getResultList();

// second one to select distinct users from this objects
String usersQuery = "SELECT distinct l.user FROM Log l where l.logId in (:logIds)";
...
userJpaQuery.setParameter("logIds", logs);
List<User> users = userJpaQuery.getResultList();

このアプローチでは、選択したLogオブジェクトに対して個別のユーザーがいます。

于 2012-07-30T09:04:16.650 に答える