1

使用 JPA,我想为特定操作类型选择所有 Log 对象。我想从日志对象中获取用户(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

两个查询解决方案

由于您需要Log对象和distinct User对象,因此您可以执行两个查询,第一个查询检索Log对象,第二个查询检索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();

使用这种方法,您可以拥有 selectLog对象的不同用户。

于 2012-07-30T09:04:16.650 回答