Fala pessoal!
Estou tomando a maior surra, estou a horas e horas e de verdade não entendo o que estou fazendo de errado.
Tenho uma classe User que possui uma relação com o Profile (muitos para um), ou seja, um User precisa de ter um Profile e automaticamente um Profile pode ter vários Users.
Tudo funciona perfeitamente até um precisar acessar alguma informação do Profile partindo do User, tanto no spring quando no próprio Sysout a aplicação quebra retornando o famoso erro do lazy.
Se eu mudo o FetchType pra Eager ele não quebra, porém fica consultando os dados da Profile a todo momento ( que é a sua função) mas eu quero realmente usar o recurso da Lazy de consultar somente que eu chamar.
Segue o erro:
Sun Nov 07 03:33:18 BRT 2021
There was an unexpected error (type=Internal Server Error, status=500).
could not initialize proxy [br.com.occhi.model.Profile#1] - no Session
org.hibernate.LazyInitializationException: could not initialize proxy [br.com.occhi.model.Profile#1] - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:170)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:310)
at org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor.intercept(ByteBuddyInterceptor.java:45)
at org.hibernate.proxy.ProxyConfiguration$InterceptorDispatcher.intercept(ProxyConfiguration.java:95)
Meu modelo User
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@NotBlank
private String nome;
@NotNull
@NotBlank
private String email;
@NotNull
@NotBlank
private String senha;
@ManyToOne(fetch = FetchType.LAZY)
private Profile profile;
/*Getters and Setters*/
}
Meu modelo Profile
@Entity
@Table(name = "profiles")
public class Profile{
public Profile(){
}
public Profile(Integer id) {
this.id = id;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Size(min=5, max=20)
private String nome;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "profile", fetch = FetchType.LAZY)
private List<User> users;
/*Getters and Setters*/
}
Se eu chamar na view do Thymeleaf com essa linha já era:
<td th:text="${user.profile.nome}"> profile</td>