我有3个表:配方,成分和配方成分具有以下关系:
配方-1:正RecipeIngredient-N:1-成分
RecipeIngredient看起来像:
id | recipe_id | ingredient_id | value
1 | 1 | 1 | 200
2 | 1 | 2 | 0.2
3 | 2 | 1 | 140
4 | 2 | 4 | 20
成分看起来像:
id | name |
1 | Apple |
2 | Banana |
3 | Orange |
4 | Lemon |
recipe_id和ingredient_id是FK。
现在我想检查,如果数据库已经有一个具有相同成分名称和值的配方(以避免重复配方)。
我的函数获取名称和值的字符串列表和浮点数。
我目前的做法并没有注意检查价值,但它已经不起作用。
// _IngredientNames == List of Strings with the names
// _IngredientValues == List of floats with the values
Criteria RecipeCriteria = DBSession.createCriteria(DBRecipeIngredient.class, "RecipeIngredient");
RecipeCriteria.createAlias("RecipeIngredient.ingredient", "i");
RecipeCriteria.add(Restrictions.in("i.name", _IngredientNames));
int NumberOfRecipes = RecipeCriteria
.setProjection(Projections.projectionList()
.add(Projections.groupProperty("RecipeIngredient.recipe")))
.list().size();
实施例: 如果我说,我有Apple 200和Banana 0.2,NumberOfRecipes应该是1.如果我有Apple 200和Banana 0.3,NumberOfRecipes应该是0.或者如果我有Apple 10和Lemon 3,NumberOfRecipes也应该是0.
我希望有人可以提供帮助。
谢谢!