Справка по запросу JDO (поиск рецептов по ингредиентам) - PullRequest
0 голосов
/ 25 мая 2011

Мне нужна помощь с запросом JDO.

У меня есть следующие сущности:

рецепт:

@PersistenceCapable
class Recipe{

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long key;

    ...

    @Persistent(mappedBy = "recipe")
    private List<RecipeIngredient> ingredients
}

recipeIngredient:

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
class RecipeIngredient implements Serializable {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    Integer amount

    @Persistent
    Key unit

    @Persistent
    Key ingredient

    @Persistent
    Recipe recipe

ингредиент:

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
class Ingredient implements Serializable {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    String name

Рецепт может иметь несколько ингредиентов рецепта, в которых содержится фактический ингредиент, количество ингредиента и единица измерения.

Я бы хотел получить все рецепты по ингредиентам, которые содержат только указанные ингредиенты и не более.

На данный момент я делаю это:

  • получить все объекты ингредиента по названию ингредиента
  • получить все объекты recipeIngredient по ключу ингредиента
  • получить все рецепты по recipeIngredient
  • проверить, есть ли все ингредиенты рецепта из рецепта в списке ингредиентов рецепта до
  • если это так, добавить рецепт в список вывода

Могу ли я сделать это с помощью запроса? может быть, что-то похожее на наличие?

1 Ответ

0 голосов
/ 21 июня 2011

Попробуйте что-то вроде ...

select r from Recipe r
        where ingredients.contains(ri) && (ri.ingredient.name.matches(:searchTxt))

Также взгляните на: http://www.datanucleus.org/servlet/forum/listthreads?forum=9

Я не использую Google App Engine, но я активно использую DataNucleus и считаю, что DataNucleus - это реализация JDO, которую использует App Engine.

Дайте мне знать, как это работает на App Engine, так как я постоянно выполняю подобные вещи в своих приложениях.

...