0

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.

th0bse
  • 97
  • 8
namer
  • 33
  • 6

0 Answers0