2013-10-12 8 views
1

Вот мои данные:GAE Datastore просмотра с помощью GQL WHERE запроса для строки, кажется, не работает

ID/Имя createdTime CUSTOMERNAME ITEMNAME Статус количество цена user_orderid ID = 5681726336532480 2013-10-12 05:07: 47.794000 "джо" "Nexus 5" 349,00 1 "до" "1"

Запуск любого из этих двух запросов дает мне данные:
SELECT * FROM порядка
SELECT * FROM порядка ORDER BY createdTime DESC

Но запуск обязанный не дает мне ничего:
SELECT * FROM порядка WHERE статус = 'в ожидании'
SELECT * FROM порядка WHERE статус = 'в ожидании' ORDER BY createdTime DESC

Я вижу результаты при выполнении следующего:
SELECT * FROM order WHERE status! = 'pending'

Так что я знаю, что предложение WHERE оказывает некоторое влияние. Я просто не могу получить «ожидание» в запросе GQL, чтобы он соответствовал «ожидающему» в хранилище данных.

Мой индекс определяется как так:
Статус заказа ▲, ▼ createdTime сервировки

Я удалил запись и заново добавить его, чтобы убедиться, что она была создана после того, как индекс был на месте. Это не помогло. Я снова и снова читал справочную страницу GQL, но не нашел ничего полезного. Некоторые сообщения в stackoverflow указали, что мой синтаксис для выполнения WHERE = 'string' верен. Но независимо от того, что я делаю, я не могу заставить это возвращать данные для Datastore Viewer или моего реального приложения, которое пытается запустить этот запрос.

Я столкнулся с этим, делая App код двигателя лаборатории Упражнение 8 размещенных здесь: http://googcloudlabs.appspot.com/codelabexercise8.html

Update: Вот модель в соответствии с просьбой:

/** 
* <p>Java class for order complex type. 
* 
* <p>The following schema fragment specifies the expected content contained within this class. 
* 
* <pre> 
* &lt;complexType name="order"> 
* &lt;complexContent> 
*  &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> 
*  &lt;sequence> 
*   &lt;element name="customer" type="{http://www.w3.org/2001/XMLSchema}string"/> 
*   &lt;element name="status" type="{http://www.w3.org/2001/XMLSchema}string"/> 
*   &lt;element name="user_orderid" type="{http://www.w3.org/2001/XMLSchema}string"/> 
*   &lt;element name="item" type="{http://www.w3.org/2001/XMLSchema}string"/> 
*   &lt;element name="quantity" type="{http://www.w3.org/2001/XMLSchema}positiveInteger"/> 
*   &lt;element name="price" type="{http://www.w3.org/2001/XMLSchema}decimal"/> 
*  &lt;/sequence> 
*  &lt;attribute name="id" type="{http://www.w3.org/2001/XMLSchema}long" /> 
*  &lt;/restriction> 
* &lt;/complexContent> 
* &lt;/complexType> 
* </pre> 
* 
* 
*/ 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "order", propOrder = { 
    "customer", 
    "status", 
    "userOrderid", 
    "item", 
    "quantity", 
    "price" 
}) 
public class Order { 

    @XmlElement(required = true) 
    protected String customer; 
    @XmlElement(required = true) 
    protected String status; 
    @XmlElement(name = "user_orderid", required = true) 
    protected String userOrderid; 
    @XmlElement(required = true) 
    protected String item; 
    @XmlElement(required = true) 
    protected BigInteger quantity; 
    @XmlElement(required = true) 
    protected BigDecimal price; 
    @XmlAttribute 
    protected Long id; 

    ... getters and setters ... 

Здесь индекс базы данных:

<datastore-indexes> 
    <datastore-index kind="order" ancestor="false" source="auto"> 
     <property name="status" direction="asc"/> 
     <property name="createdTime" direction="desc"/> 
    </datastore-index> 
</datastore-indexes> 

Обновление: Исправлено. Данные должны выглядеть так, а не то, что я написал выше.
ID/Имя createdTime CUSTOMERNAME ITEMNAME статус количество цена user_orderid
ID = 5760616295825408 2013-10-12 19: 25: 13,098000 джо Nexus 5 349.00 1 ожидающий 12

+0

Если ваш синтаксис был неправильным, вероятно, вы получите сообщения об ошибках. У вас есть? Как вы создали запись? Не могли бы вы показать нам свою модель/структуру данных? – Bugs

+0

Нет ошибки, просто пустой набор результатов, когда кажется, что результаты должны быть возвращены. – Splaktar

+0

«Нет пустых пространств имен». это то, что возвращает Datastore Viewer. – Splaktar

ответ

3

У вас есть кавычки вокруг нескольких полей в ваших данных, поэтому он не будет соответствовать вашему запросу. Очистите данные, и вам должно быть хорошо.

+0

Doh! Да, файл XML, который я создал с помощью обратного проектирования .XSD-файла, имеет значения «» по значениям строкового элемента. Удаление этих проблем устранено! Я также попытался выполнить запрос с WHERE status = '"pending"', и это сработало, поэтому оказалось, что кавычки в данных вызывали проблему. – Splaktar

-1

Может быть, что 'статус' недокументированная зарезервированное слово ?

Это объясняет это.

0

Вы можете установить status как indexed=False или TextProperty (что подразумевает неиндексированный). Пожалуйста, разместите определение модели здесь, чтобы у нас было больше деталей, чтобы ответить на ваши вопросы!