Empty results returned using a many to many relation

Viewed 43

I working with Spring and I have developed two entities: Role and User with a ManyToMany relation between them. The related classes of my project are the following ones:

Entities

@Entity
@Table(name = "UTILISATEURS")
public class Utilisateur {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long id;

  private String username;
  private String password;
  private String email;

  @ManyToMany(mappedBy = "utilisateurs")
  private Set<Role> roles = new HashSet<Role>();

  public Utilisateur() {
    super();
  }

  public void addRole(Role role) {
    this.roles.add(role);
  }

  // Getters and setters
}
    

@Entity
@Table(name = "ROLES")
public class Role {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long id;

  private String name;

  @ManyToMany(cascade = CascadeType.ALL)
  @JoinTable(name = "UTILISATEURS_ROLES", joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "UTILISATEUR_ID"))
  private Set<Utilisateur> utilisateurs = new HashSet<Utilisateur>();

  public Role(String name) {
    this.name = name;
  }

  public void addUtilisateurs(Utilisateur user) {
    this.utilisateurs.add(user);
  }

  @ManyToMany(cascade = CascadeType.ALL)
  @JoinTable(name = "UTILISATEURS_ROLES", joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "UTILISATEUR_ID"))
  public Set<Utilisateur> getUtilisateurs() {
    return utilisateurs;
  }

  // Getters and setters     
}

Repositories:

public interface RoleRepository extends JpaRepository<Role, Long> {
}

public interface UtilisateurRepository extends JpaRepository<Utilisateur, Long> {
}

Main application:

@SpringBootApplication
public class ContactsApplication implements CommandLineRunner {

    @Autowired
    UtilisateurRepository utilisateurRepository;

    @Autowired
    RoleRepository roleRepository;

    public static void main(String[] args) {
        SpringApplication.run(ContactsApplication.class, args);
    }

    @Override
    public void run(String... arg0) throws Exception {
            
        Utilisateur user1 = new Utilisateur();
        user1.setEmail("jl@mymail1.com");
        user1.setPassword("mypass1");
        user1.setUsername("myUser1");
        Role role1 = new Role("ADMIN");
        roleRepository.save(role1);
        role1.addUtilisateurs(user1);
        Set<Role> userRole1 = new HashSet<Role>();
        userRole1.add(role1);
        user1.addRole(role1);
        utilisateurRepository.save(user1);

        Utilisateur user2 = new Utilisateur();
        user2.setEmail("jl@mymail2.com");
        user2.setPassword("mypass2");
        user2.setUsername("myUser2");
        Role role2 = new Role("USER");
        roleRepository.save(role2);
        role2.addUtilisateurs(user2);
        Set<Role> userRole2 = new HashSet<Role>();
        userRole2.add(role2);
        user2.setRoles(userRole2);
        user2.addRole(role2);
        utilisateurRepository.save(user2);

    }

}

Controller:

@RestController
@CrossOrigin("*")
public class UtilisateurRestService {

    @Autowired
    private UtilisateurRepository utilisateurRepository;

    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public List<Utilisateur> getUtilisateurs() {
        return utilisateurRepository.findAll();
    }

}

When I invoke the endpoint http://localhost:8080/users, I receive the following results (with empty roles):

[
    {
        "id": 1,
        "username": "myUser1",
        "password": "mypass1",
        "email": "jl@mymail1.com",
        "roles": []
    },
    {
        "id": 2,
        "username": "myUser2",
        "password": "mypass2",
        "email": "jl@mymail2.com",
        "roles": []
    }
]

Have you any idea what my roles arrays are empty? It should contains one role(admin) for the first and role(user) for the second.

0 Answers
Related