Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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 对多个列的独特查询不起作用-谷歌应用程序引擎数据存储_Java_Android_Google App Engine_Google Cloud Datastore_Google Cloud Endpoints - Fatal编程技术网

Java 对多个列的独特查询不起作用-谷歌应用程序引擎数据存储

Java 对多个列的独特查询不起作用-谷歌应用程序引擎数据存储,java,android,google-app-engine,google-cloud-datastore,google-cloud-endpoints,Java,Android,Google App Engine,Google Cloud Datastore,Google Cloud Endpoints,我想从endpoint类中的GoogleAppEngine数据存储中获取不同的多个列。对于这一点,我使用下面的代码,但问题是,若我尝试只获取单个列,那个么它只能正常工作并返回不同的数据。若我尝试获取多个列,那个么DISTINCT将不起作用,它将返回所有记录,而不受DISTINCT查询的影响。我不知道我的代码出了什么问题。请提出任何解决方案,并指导我哪里出了问题。 多谢各位 代码: 请注意,DISTINCT仅适用于索引属性。如果uFullName或uName中的任何一个都没有索引,则投影将不起作用

我想从endpoint类中的GoogleAppEngine数据存储中获取不同的多个列。对于这一点,我使用下面的代码,但问题是,若我尝试只获取单个列,那个么它只能正常工作并返回不同的数据。若我尝试获取多个列,那个么DISTINCT将不起作用,它将返回所有记录,而不受DISTINCT查询的影响。我不知道我的代码出了什么问题。请提出任何解决方案,并指导我哪里出了问题。 多谢各位

代码:


请注意,DISTINCT仅适用于索引属性。如果uFullName或uName中的任何一个都没有索引,则投影将不起作用。

我不确定您的代码是否有问题,但DISTINCT关键字仍然是实验性的,如文档中所述,因此这种查询可能存在问题。也许你可以尝试不投射到特定的列上,而是检索所有的列,看看是否有什么不同。我不确定这是否是问题所在,但是使用多个参数的DISTINCT将返回不同的元组。所以在您的查询中,它应该返回每一对不同的uFullName,uUrl。您能提供返回的重复项吗?@PatrickCostello当我使用DISTINCT with single column时,它会返回不同的数据,但如果我使用DISTINCT with multiple column时,它会返回重复项。您能提供一些返回数据的示例吗?@PatrickCostello我正在使用应用程序引擎中的NoSql。总共有12条记录的userName=abc。如果我只使用Distint-uFullName,其中uName='abc',则返回一条带值的记录;如果我使用Distinct-uFullName,其中uUrl,uName='abc',则返回所有12条记录,而不受Distinct查询的影响。
@SuppressWarnings({ "unchecked" })
    @ApiMethod(name = "getDistinctFollow", httpMethod = HttpMethod.GET, path = "userendpoint/userName_fk3")
    public ObjectListContainer getDistinctFollower(
            @Named("followName") ArrayList<String> lstFollower,
            @Nullable @Named("cursor") String cursorString,
            @Nullable @Named("limit") Integer limit) {

        EntityManager mgr = null;
        Cursor cursor = null;
        List<Object[]> lstNames;
        List<String> lstString;
        ObjectListContainer object;
        try {
            mgr = getEntityManager();
            Query query = mgr.createQuery("select distinct f.uFullName,f.uUrl from UMaster f where f.uName in (:followName)");
            query.setParameter("followName", lstFollower);
            if (cursorString != null && cursorString != "") {
                cursor = Cursor.fromWebSafeString(cursorString);
                query.setHint(JPACursorHelper.CURSOR_HINT, cursor);
            }
            if (limit != null) {
                query.setFirstResult(0);
                query.setMaxResults(limit);
            }
            lstNames = (List<Object[]>) query.getResultList();
            cursor = JPACursorHelper.getCursor(lstNames);
            if (cursor != null)
                cursorString = cursor.toWebSafeString();

            lstString = new ArrayList<String>();

            for (Object obj[] : lstNames) {
                lstString.add(obj != null ? obj[0].toString() : null);
                lstString.add(obj != null ? obj[1].toString() : null);
            }
            object = new ObjectListContainer();
            object.setObjectsList(lstString);

        } finally {
            mgr.close();
        }
        return object;
    }