I have 3 tables: Recipe, Ingredient and RecipeIngredient with the following relation:
Recipe-1:n-RecipeIngredient-n:1-Ingredient.
RecipeIngredient looks like:
id | recipe_id | ingredient_id | value
1 | 1 | 1 | 200
2 | 1 | 2 | 0.2
3 | 2 | 1 | 140
4 | 2 | 4 | 20
Ingredient looks like:
id | name |
1 | Apple |
2 | Banana |
3 | Orange |
4 | Lemon |
recipe_id and ingredient_id are FKs.
Now I want to check, if the database has already one recipe with the same ingredient names and values (to avoid duplicate recipes).
My function gets a List of Strings and floats for the names and the values.
My current approach does not pay attention to check the value, but it already doesn't work.
// _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();
Examples: If I say, I have Apple 200 and Banana 0.2, NumberOfRecipes should be 1. If I had Apple 200 and Banana 0.3, NumberOfRecipes should be 0. Or if I had Apple 10 and Lemon 3, NumberOfRecipes should also be 0.
I hope someone can help.
Thanks!