java - 多列上的 DISTINCT 查询不起作用 - Google App Engine 数据存储区

标签 java android google-app-engine google-cloud-datastore google-cloud-endpoints

我想从 endpoint 类中的 Google 应用引擎数据存储区获取不同的多列。为此,我使用下面的代码,但问题是,如果我尝试仅获取单个列,那么只有它可以正常工作并返回不同的数据。如果我尝试获取多个列,则 DISTINCT 不起作用,它会返回所有记录,而不会受到 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;
    }

最佳答案

请注意,DISTINCT 仅适用于索引属性。如果 uFullNameuName 中的任何一个未建立索引,则投影将不起作用。

关于java - 多列上的 DISTINCT 查询不起作用 - Google App Engine 数据存储区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23211174/

相关文章:

java - System.nanoTime() 在 java 7 和 java 8 之间返回不同的值

java - jsp中映射自定义标签时出错

java - Java 中打开的文件太多

google-app-engine - Cloud Container Builder,ZIP不支持1980年之前的时间戳

java - 在 Google App Engine 中使用 Java,如何从 int r、g、b 值的数组中制作 BMP 图像?

java - list screenOrientation 属性与 setRequestedOrientation

java - Android 无限 URL 加载

java - 如何让我的应用程序像 Google map 一样接收位置 Intent

android - Cloud Firestore/Firebase 带宽非常高

android - 将开发服务器添加到 App-Engine