使用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;
....
}
答案 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
对象提供不同的用户。