Java 与JPA中的distinct存在问题
使用JPA,我想选择特定actiontype的所有日志对象。我想从log对象获取用户(log.getUser()),但用户在结果列表中出现了几次。我用Java 与JPA中的distinct存在问题,java,oracle11g,jpa-2.0,distinct,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.acti
distinct
尝试了它,但它不起作用,我想是因为我无法定义什么是distinct
。以下是我的JPA查询:
SELECT DISTINCT log
FROM Log AS log JOIN log.action AS action
JOIN log.user AS user
WHERE action.actionType = :actionType
如果我说选择DISTINCT user
,那么最后我就没有完整的日志对象
任何帮助或暗示都将不胜感激
编辑:
我的日志类的一部分:
public class Log {
private int logId;
private Calendar logDate;
private User user;
private Action action;
private String description;
....
}
两个查询解决方案
由于需要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();
//第一个选择日志对象的
String logQuery=“从日志l中选择l,其中l.actionType=:actionType”;
...
List logs=logJpaQuery.getResultList();
//第二个是从这个对象中选择不同的用户
String usersQuery=“从日志l中选择不同的l.user,其中l.logId位于(:logIds)”;
...
setParameter(“logIds”,logs);
List users=userJpaQuery.getResultList();
使用这种方法,您可以为select
Log
s对象指定不同的用户。使用groupbyactiontype
,而不是distinct
。不,这是错误的。我想让所有用户都参与特定的操作类型。现在我得到了所有用户,但是如果一个用户有3个日志条目,那么同一个用户在列表中的次数是3倍。这就是为什么应该使用distinct。你的问题是矛盾的。首先,您说需要特定操作类型的日志,然后在注释中,您说需要特定操作类型的用户。选择您真正想要的。我想要完整的日志对象,但是日志对象中的用户必须是不同的。您可以发布log
类吗?谢谢!我想我最初的要求是不可能的一个查询。我只是注意到了。我决定只选择用户。因此,我结束了这个查询:选择不同的用户作为Log JOIN Log.action作为action JOIN Log.user作为user WHERE action.actionType=:actionType
我明白了,这意味着我赢得了赏金?;)