LazyInitializationException al usar @Inheritance

Estoy tratando de usar Herencia usando este proyecto https://github.com/Baeldung/spring-security-registration .

Este es mi usuario:

@Data
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING, name = "TYPE")
public abstract class User {
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(name = "users_roles",joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
     private Collection<Role> roles;
}

y alguna subclase como UserAdmin:

@Entity
@DiscriminatorValue("ADMIN")
public class UserAdmin extends User {}

Entonces mi clase de rol es así:

@Data
@Entity
public class Role {
     @ManyToMany(mappedBy = "roles")
     private Collection<User> users;
}

Pero recibí este error cuando registré un usuario:

o.h.LazyInitializationException: failed to lazily initialize a collection of role: com.baeldung.persistence.model.Role.users, could not initialize proxy - no Session

Necesito ayuda chicos.

Answer

Necesitamos un poco más de contexto, pero generalmente tienes dos opciones:

  1. Haga que el método al que llama "getRoles()" se anote con @Transactional.

o

  1. Crea un método en jpa con un @Query("SELECT u from user u join fetch u.roles where u.id =:id").