diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Recipe.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Recipe.java index c958cac42e64891ed33a6e2f1162371a25b60e41..c42c4093fbf6347cbe811bb3535e97acef616538 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Recipe.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Recipe.java @@ -3,6 +3,7 @@ package ntnu.idatt2016.v233.SmartMat.entity; import java.util.ArrayList; import java.util.List; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import jakarta.persistence.*; @@ -39,15 +40,21 @@ public class Recipe { @Column(name = "recipe_description") String description; - @ManyToMany - @JoinTable(name = "recipe_product", - joinColumns = @JoinColumn(name = "recipe_id"), - inverseJoinColumns = @JoinColumn(name = "ean")) + @ManyToMany(fetch = FetchType.LAZY, + cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH} + ,mappedBy = "recipes" + ) @JsonIgnoreProperties({"recipes"}) List<Product> products; - @ManyToMany(mappedBy = "recipes") - @JsonIgnoreProperties({"recipes"}) + @ManyToMany(fetch = FetchType.LAZY, + cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH} + ) + @JoinTable( + name = "favorite_recipes", + joinColumns = @JoinColumn(name = "recipe_id"), + inverseJoinColumns = @JoinColumn(name = "username")) + @JsonIgnore List<User> users; diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/ShoppingList.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/ShoppingList.java index e2fa1fc8fc57144d8df69106c604731bbd6d2729..339e86cfac410c68a4c974766eca63950944c5ef 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/ShoppingList.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/ShoppingList.java @@ -1,6 +1,7 @@ package ntnu.idatt2016.v233.SmartMat.entity; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import jakarta.persistence.*; import lombok.*; @@ -33,14 +34,11 @@ public class ShoppingList { @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "group_id") - @JsonIgnoreProperties({"shoppingList", "hibernateLazyInitializer", "handler"}) + @JsonIgnore private Group group; - @ManyToMany - @JoinTable( - name = "shopping_list_product", - joinColumns = @JoinColumn(name = "shopping_list_id"), - inverseJoinColumns = @JoinColumn(name = "ean")) + @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, + fetch = FetchType.LAZY, mappedBy = "shoppingLists") @JsonIgnoreProperties("shoppingLists") private List<Product> products; diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Waste.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Waste.java index d7667ed7211519ca9ffd611e6e07ca37aca3c078..b876946b6c7dd762dad3566334e1210241e223e9 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Waste.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Waste.java @@ -1,5 +1,6 @@ package ntnu.idatt2016.v233.SmartMat.entity; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import jakarta.persistence.*; import lombok.AllArgsConstructor; @@ -31,13 +32,16 @@ public class Waste { @Column(name = "waste_id") long wasteId; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY, + cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) @JoinColumn(name = "group_id") - @JsonIgnoreProperties("group") + @JsonIgnore Group groupId; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY, + cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) @JoinColumn (name= "ean") + @JsonIgnore Product ean; @Column(name = "timestamp") diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java index a6a728553606bc909ba46d3abb49e3726527cfc3..8e82358929612d141ff28269560da43a835fa5dd 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java @@ -21,16 +21,14 @@ public class FridgeProductAsso { @Column(name = "fridge_product_id") private long id; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) @JoinColumn(name = "fridge_id") @JsonIgnoreProperties({"products"}) - @JsonIgnore private Fridge fridgeId; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) @JoinColumn(name = "ean") @JsonIgnoreProperties({"fridges"}) - //@JsonIgnore // Til Birk: måtte fjerne denne for å få nødvendig info i fridge. Er det dumt? private Product ean; @Column(name = "purchase_date") diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Achievement.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Achievement.java index b73a4d8d1475ffdfd1c1fd860877df2ad2bd655b..1e692d3a28d0b1fe9126e6b8ed746b98211b1e35 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Achievement.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Achievement.java @@ -1,10 +1,8 @@ package ntnu.idatt2016.v233.SmartMat.entity.group; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -36,7 +34,11 @@ public class Achievement { @Column(name = "achievement_description") private String achievementDescription; - @ManyToMany(mappedBy = "achievements") - @JsonIgnoreProperties({"achievements"}) + @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, + fetch = FetchType.LAZY) + @JoinTable(name = "group_achievement", + joinColumns = @JoinColumn(name = "achievement_name"), + inverseJoinColumns = @JoinColumn(name = "group_id")) + @JsonIgnore private List<Group> groups; } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java index 9e975a5578542e4f657d6a015848b7918fc92b20..18bbfb732438f7ac86aaaca02fde6cdbec14ae63 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java @@ -3,6 +3,7 @@ package ntnu.idatt2016.v233.SmartMat.entity.group; import java.util.ArrayList; import java.util.List; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import jakarta.persistence.*; @@ -33,14 +34,14 @@ public class Fridge{ @Column(name = "fridge_id") long fridgeId; - @OneToOne + @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "group_id") - @JsonIgnoreProperties("fridge") + @JsonIgnore Group group; - @OneToMany(cascade = CascadeType.ALL) + @OneToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, + fetch = FetchType.LAZY, mappedBy = "fridgeId") @OnDelete(action = OnDeleteAction.CASCADE) - @JoinColumn(name = "fridge_id") @JsonIgnoreProperties("fridge") List<FridgeProductAsso> products; diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java index c1218a32a25d65dc079e3936654601fd4c8c09f7..c390052ee47bd59e9df60ff40d80a7db45d52d9e 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java @@ -56,10 +56,9 @@ public class Group { private ShoppingList shoppingList; - @OneToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.LAZY) - @JoinColumn(name = "group_id") + @OneToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, + fetch = FetchType.LAZY, mappedBy = "group") @JsonIgnoreProperties("group") - @OnDelete(action = OnDeleteAction.CASCADE) private List<UserGroupAsso> user = new ArrayList<>(); @@ -76,10 +75,8 @@ public class Group { @OnDelete(action = OnDeleteAction.CASCADE) private Fridge fridge; - @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.LAZY) - @JoinTable(name = "group_achievement", - joinColumns = @JoinColumn(name = "group_id"), - inverseJoinColumns = @JoinColumn(name = "achievement_name")) + @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.LAZY, + mappedBy = "groups") @JsonIgnoreProperties({"groups"}) private List<Achievement> achievements; diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Allergy.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Allergy.java index ef148b03d99cf8f7aab682d88c1dd07bf0d6b9af..77870ee42c8df6c2a87d571952e8d8935b5901c6 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Allergy.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Allergy.java @@ -1,10 +1,8 @@ package ntnu.idatt2016.v233.SmartMat.entity.product; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -35,12 +33,20 @@ public class Allergy{ @Column(name = "allergy_description") String description; - @ManyToMany(mappedBy = "allergies") - @JsonIgnoreProperties({"allergies"}) + @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) + @JoinTable( + name = "product_allergy", + joinColumns = @JoinColumn(name = "allergy_name"), + inverseJoinColumns = @JoinColumn(name = "ean") ) + @JsonIgnore private List<Product> products; - @ManyToMany(mappedBy = "allergies") - @JsonIgnoreProperties({"allergies"}) + @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) + @JoinTable( + name = "user_allergy", + joinColumns = @JoinColumn(name = "allergy_name"), + inverseJoinColumns = @JoinColumn(name = "username") ) + @JsonIgnore private List<User> users; } \ No newline at end of file diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Category.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Category.java index 693aa5ec2f552516abc89188563576aadc15accf..2e2b8f622c7864274b557f82ca28cab2f0e65948 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Category.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Category.java @@ -1,5 +1,6 @@ package ntnu.idatt2016.v233.SmartMat.entity.product; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import jakarta.persistence.*; import lombok.AllArgsConstructor; @@ -22,6 +23,6 @@ public class Category { String description; @OneToMany(mappedBy = "category") - @JsonIgnoreProperties({"category"}) + @JsonIgnore private List<Product> products; } \ No newline at end of file diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java index fd5e6793c01de0efd926a8b42ed6bbb2d347755b..3f3840db584c0c651f19a3e2f5d41bdf6b95f3b2 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java @@ -39,15 +39,19 @@ public class Product{ @Column(name = "description") String description; - @ManyToMany(mappedBy = "products") - @JsonIgnoreProperties({"products"}) + @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, + fetch = FetchType.LAZY) + @JoinTable( + name = "shopping_list_product", + joinColumns = @JoinColumn(name = "ean"), + inverseJoinColumns = @JoinColumn(name = "shopping_list_id") ) @JsonIgnore List<ShoppingList> shoppingLists; - @ManyToOne + @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, + fetch = FetchType.LAZY) @JoinColumn(name = "category_name") - @JsonIgnoreProperties({"products"}) @JsonIgnore Category category; @@ -66,24 +70,22 @@ public class Product{ @Column(name = "amount") Double amount; - @ManyToMany + @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, + fetch = FetchType.LAZY, mappedBy = "products") @JsonIgnoreProperties({"products", "users"}) - @JoinTable( - name = "product_allergy", - joinColumns = @JoinColumn(name = "ean"), - inverseJoinColumns = @JoinColumn(name = "allergy_name")) - @JsonIgnore List<Allergy> allergies; - @OneToMany(cascade = CascadeType.ALL) + @OneToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, + fetch = FetchType.LAZY, mappedBy = "ean") @OnDelete(action = OnDeleteAction.CASCADE) - @JoinColumn(name = "ean") @JsonIgnoreProperties({"products"}) @JsonIgnore List<FridgeProductAsso> fridges; - @ManyToMany(mappedBy = "products") - @JsonIgnoreProperties({"products"}) + @ManyToMany + @JoinTable(name = "recipe_product", + joinColumns = @JoinColumn(name = "ean"), + inverseJoinColumns = @JoinColumn(name = "recipe_id")) @JsonIgnore List<Recipe> recipes; diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java index 5c91b0fbdd356232a2e6e3375ab5643ec5abd4a3..8f9f5967ffd42d4048bf28eb6c6147821fdbc6bd 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java @@ -57,24 +57,18 @@ public class User implements UserDetails { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "username") - @JsonIgnoreProperties("user") + @JsonIgnore private List<UserGroupAsso> group; - @ManyToMany - @JoinTable( - name = "user_allergy", - joinColumns = @JoinColumn(name = "username"), - inverseJoinColumns = @JoinColumn(name = "allergy_name")) + @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, + mappedBy = "users") @JsonIgnoreProperties({"users", "products"}) private List<Allergy> allergies; - @ManyToMany - @JoinTable( - name = "favorite_recipes", - joinColumns = @JoinColumn(name = "username"), - inverseJoinColumns = @JoinColumn(name = "recipe_id")) + @ManyToMany(mappedBy = "users", + fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) @JsonIgnoreProperties({"users"}) private List<Recipe> recipes; diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepository.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepository.java index 9465917aa7f4fe71a8b2cb6c88c5528d3ed1b611..6363b44990e2779e83fa589673c684939701231d 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepository.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepository.java @@ -26,12 +26,6 @@ public interface GroupRepository extends JpaRepository<Group, Long> { */ Optional<Group> findByGroupName(String name); - /** - * Finds all groups by achievement name - * @param achievementName the name of the achievement - * @return list of groups with the given achievement - */ - List<Group> findAllByAchievementsAchievementName(String achievementName); /** * Gets group level by group id diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepositoryTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepositoryTest.java index 5f549192b67a56f5ff3e1f2bd0c45961340d705f..69cd0518cdf81c5e27d83ebd15410faa43b321d7 100644 --- a/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepositoryTest.java +++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepositoryTest.java @@ -52,24 +52,6 @@ public class GroupRepositoryTest { assertThat(result.get()).isEqualTo(group); } - @Test - void shouldFindAllByAchievementsAchievementName() { - // given - Achievement achievement = Achievement.builder().achievementName("test achievement").build(); - Group group1 = Group.builder().groupName("group 1").achievements(List.of(achievement)).build(); - Group group2 = Group.builder().groupName("group 2").achievements(List.of(achievement)).build(); - Group group3 = Group.builder().groupName("group 3").build(); - - - groupRepository.saveAll(List.of(group1, group2, group3)); - - // when - List<Group> result = groupRepository.findAllByAchievementsAchievementName("test achievement"); - - // then - assertThat(result).containsExactlyInAnyOrder(group1, group2); - } - @Test void shouldFindById() { // given