在JPA中遇到不同的问题

时间:2012-07-27 15:03:58

标签: java oracle11g jpa-2.0 distinct

使用JPA,我想为特定的actiontype选择所有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;
    ....
}

1 个答案:

答案 0 :(得分: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();

使用这种方法,您可以为选择Log对象提供不同的用户。