@Embeddable
public class Preco {
private BigDecimal valor;
private TipoPreco tipo;
//Get e Set
}
@Entity
public class Produto {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
private String titulo;
private String descricao;
private Integer paginas;
@ElementCollection
private List<Preco> precos;
// Get e Set
}
public enum TipoPreco {
EBOOK, IMPRESSO, COMBO;
}
<div>
<label>Preço</label>
<c:forEach items="${tipos}" var="tipoPreco" varStatus="status">
<div>
<label>${tipoPreco}</label>
<input type="text" name="preco[${status.index}].valor" />
<input type="hidden" name="preco[${status.index}].tipo" value="${tipoPreco}" />
</div>
</c:forEach>
</div>
@Controller
public class ProdutosController {
@RequestMapping("/produtos/form")
public ModelAndView form() {
ModelAndView modelAndView = new ModelAndView("produtos/form");
modelAndView.addObject("tipos", TipoPreco.values());
return modelAndView;
}
// outro método
}
INFO: Starting ProtocolHandler ["http-nio-8081"]
set 15, 2020 9:48:05 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in [17659] milliseconds
Produto [titulo=O preço não tinha ido, apesar da tabela , descricao=Criou a tabela, mas não enviou preços.
Vamos ver se funciona, paginas=25]
Hibernate: insert into Produto (descricao, paginas, titulo) values (?, ?, ?)
O vídeo do professor não incluía os valores nos campos ocultos, eu tinha incluído e não tinha funcionado. Achei um absurdo funcionar sem, mas como coisas estranhas acontecem, retirei e coloquei igual ao instrutor, não funcionou novamente. Olhei o código abaixo do vídeo e vi que lá ele estava incluído, recoloquei e teste. Não fez o insert pela terceira vez.
A tabela está no banco, mas continua vazia. Script gerado pelo PHP MyAdmin da tabela:
CREATE TABLE `produto_precos` (
`Produto_id` bigint(20) NOT NULL,
`tipo` int(11) DEFAULT NULL,
`valor` decimal(19,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Podem me ajudar a identificar o problema?