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