JDO查询帮助(按成分查找食谱)

时间:2011-05-24 22:12:46

标签: java google-app-engine jdo

我需要一些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获取所有食谱
  • 检查配方中的所有recipeIngredients是否都在
  • 之前的recipeIngredient列表中
  • 如果是,请将配方添加到输出列表

我可以使用查询执行此操作吗?也许类似的东西?

1 个答案:

答案 0 :(得分:0)

尝试类似......

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是App Engine使用的JDO的实现。

让我知道这是如何在App Engine上运行的,因为我在我的应用程序中一直这样做。