Possuo os seguintes mapeamentos das entidades Tela e Ação apresentados logo abaixo:
Tela
@Entity
@Data
@Table(uniqueConstraints = @UniqueConstraint(columnNames= {"nome"}, name="uk_tela"))
public class Tela {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NotNull
private String nome;
@NotNull
@Convert(converter = AtivoEnumConverter.class)
@Column(length = 1, nullable = false)
private AtivoEnum ativo = AtivoEnum.SIM;
@OneToMany(mappedBy = "tela")
@OnDelete(action = OnDeleteAction.CASCADE)
private List<Acao> acoes;
}
Ação
@Entity
@Data
@Table(uniqueConstraints = @UniqueConstraint(columnNames= {"nome"}, name="uk_acao"))
public class Acao {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NotNull
private String nome;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "idtela", nullable = false, foreignKey = @ForeignKey(name = "fk_tela_acao"))
private Tela tela;
}
Ao criar o endpoint para listar utilizo o findAll() ou então pesquisarPorId que utilizo o findById() consigo obter a entidade por completo (Tela e Acoes), porem quando realizar o endpoint de alterar abaixo o mesmo não me retorno as ações.
Tentativa 1
@Transactional
public Tela alterar(TelaDto telaDto) {
Tela tela = telaDto.toEntity();
telaRepository.save(tela);
Optional<Tela> retorno = telaRepository.findById(telaDto.getId());
if(retorno.isPresent()) {
return retorno.get();
}
return null;
}
Tentativa 2
public interface TelaRepository extends JpaRepository<Tela, Integer>{
@Query( " select t from Tela t"
+ " join fetch t.acoes a"
+ " where t.id = :id")
Optional<Tela> pesquisarPorId(@Param(value = "id") Integer id);
}
@Transactional
public Tela alterar(TelaDto telaDto) {
Tela tela = telaDto.toEntity();
telaRepository.save(tela);
Optional<Tela> retorno = telaRepository.pesquisarPorId(telaDto.getId());
if(retorno.isPresent()) {
return retorno.get();
}
return null;
}
Alguém poderia me explicar o que esta errado ???
Em nenhuma das tentativas funcionou, mesmo eu passando o mapeamento para EAGER