Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与JPA中的distinct存在问题_Java_Oracle11g_Jpa 2.0_Distinct - Fatal编程技术网

Java 与JPA中的distinct存在问题

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

使用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
如果我说
选择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
我明白了,这意味着我赢得了赏金?;)