Eu estou realizando um projeto a parte para tentar fixar melhor a ideia de DTO, mas estou com uma duvida referente ao Service e ao Controller. O Código está funcionando , mas estou com dificuldade de fazer a logica dos métodos do Service, principalmente o metodo Atualizar. Nas aulas foi realizado o método do Controller.
Classe Produto
@Entity
@Table(name = "tb_produto")
public class Produto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String descricao;
private Double preco;
private String imgUrl;
@ManyToMany
@JoinTable(name = "tb_produto_categoria", joinColumns = @JoinColumn(name = "produto_id"), inverseJoinColumns = @JoinColumn(name = "categoria_id"))
private Set<Categoria> categorias = new HashSet<>(); // necessário já instanciar, garantir que a colecao nao comece
// nula, tem que ser vazia.
@OneToMany (mappedBy = "id.produto" )
private Set<PedidoItem> itens = new HashSet<>();
public Produto() {
}
public Produto(Long id, String nome, String descricao, Double preco, String imgUrl) {
super();
this.id = id;
this.nome = nome;
this.descricao = descricao;
this.preco = preco;
this.imgUrl = imgUrl;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Double getPreco() {
return preco;
}
public void setPreco(Double preco) {
this.preco = preco;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
public Set<Categoria> getCategorias() {
return categorias;
}
@JsonIgnore
public Set <Pedido> getPedidos(){
Set<Pedido> set = new HashSet<>();
for (PedidoItem x: itens ) {
set.add(x.getPedido());
}
return set;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Produto other = (Produto) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
ProdutoDTO
public class ProdutoDto {
private String nome;
private String descricao;
private Double preco;
public ProdutoDto() {
}
public ProdutoDto(String nome, String descricao, Double preco) {
super();
this.nome = nome;
this.descricao = descricao;
this.preco = preco;
}
public ProdutoDto(Produto produto) {
this.nome = produto.getNome();
this.descricao = produto.getDescricao();
this.preco = produto.getPreco();
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Double getPreco() {
return preco;
}
public void setPreco(Double preco) {
this.preco = preco;
}
public static List<ProdutoDto> convert(List<Produto> produtos) {
return produtos.stream().map(ProdutoDto::new).collect(Collectors.toList());
}