I have an object called Community that looks like this:
package FamilyFusion.rnr.domain.community;
import FamilyFusion.rnr.domain.familyTree.Tree;
import FamilyFusion.rnr.domain.users.User;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
public class Community {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
private Tree familyTree;
private String communityName;
@OneToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
private User admin;
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
private List<User> usersPlus;
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
private List<User> members;
public Community(Tree familyTree, String communityName, User admin, List<User> usersPlus, List<User> members) {
this.familyTree = familyTree;
this.communityName = communityName;
this.admin = admin;
this.usersPlus = usersPlus;
this.members = members;
}
}
I want to use Jpa to find all communities a user is either an admin, a userPlus, or a member in.
How do I go about doing that? My first attempt was: Jpa Repository
List<Community> findCommunitiesByAdminOrUsersPlusOrMembers(User admin, List<User> usersPlus, List<User> members);
Service Layer:
@Override
public List<Community> findCommunityByAdminOrMembersOrUsersPlus(User user) {
List<User> users = new ArrayList<>();
users.add(user);
return communityRepository.findCommunitiesByAdminOrUsersPlusOrMembers(user, users, users);
}
Which I then call in the controller:
@GetMapping("/chooseCommunity")
public String chooseCommunity(Model model, Principal principal) {
User user = userService.findUserByEmail(principal.getName());
List<Community> communities = communityService.findCommunityByAdminOrMembersOrUsersPlus(user);
if (communities.size() == 0) {
return "redirect:/recipe/viewAllMyRecipes";
} else if (communities.size() == 1) {
return "redirect:/recipe/viewAllCommunityRecipes/"+communities.get(0).getId();
} else {
return "chooseCommunity";
}
}
However it threw me an error when I ran the server, saying there is an error because of it.