Boa noite!
Estou com um problema me atormentando. Tenho duas tabelas no banco com relação de 1xn (uma Marca pode ter muitos veículos). Acontece o seguinte,na tela de cadastro do veículo, carrego um select com dados da tabela marca, passando uma lista para a view na action do formulário. Os dados da marca populam a select sem problema, mas ao persistir o veículo no banco, o marca_id fica nulo. Alguem passou por algo parecido (estou usando jsp+springMVC+JPA)?
Marca Model:
@Entity
@Table(name="marca")
public class Marca {
private Integer id;
private String marca;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@NotNull
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
Viatura Model:
@Entity
@Table(name="viatura")
public class Viatura {
private Integer id;
private String placa;
private String modelo;
private String prefixo;
private Integer ano;
private String patrimonio;
private String renavam;
private Boolean ativo;
private Combustivel tipoCombustivel;
private TipoServico tipoServico;
private Marca marca;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPlaca() {
return placa;
}
public void setPlaca(String placa) {
this.placa = placa;
}
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
public String getPrefixo() {
return prefixo;
}
public void setPrefixo(String prefixo) {
this.prefixo = prefixo;
}
public Integer getAno() {
return ano;
}
public void setAno(Integer ano) {
this.ano = ano;
}
public String getPatrimonio() {
return patrimonio;
}
public void setPatrimonio(String patrimonio) {
this.patrimonio = patrimonio;
}
public String getRenavam() {
return renavam;
}
public void setRenavam(String renavam) {
this.renavam = renavam;
}
public Boolean getAtivo() {
return ativo;
}
public void setAtivo(Boolean ativo) {
this.ativo = ativo;
}
@ManyToOne
public Marca getMarca() {
return marca;
}
public void setMarca(Marca marca) {
this.marca = marca;
}
Viatura Controller:
@Controller
@Transactional
@RequestMapping("/viaturas")
public class ViaturaController {
@Autowired
private ViaturaDAO viaturaDAO;
@Autowired
private MarcaDAO marcaDAO;
//========================================REDIRECTS===============================================================
@RequestMapping("/form")
public ModelAndView form (Viatura viatura){
List<Marca> listaMarcas = new ArrayList<>();
listaMarcas = marcaDAO.list();
ModelAndView modelAndView = new ModelAndView("/viaturas/formulario");
modelAndView.addObject("marcas", listaMarcas);
return modelAndView;
}
//========================================CRUD====================================================================
@RequestMapping(method=RequestMethod.POST)
public ModelAndView save(@Valid Viatura viatura, BindingResult bindingResult, RedirectAttributes attributes){
viaturaDAO.save(viatura);
attributes.addFlashAttribute("sucesso", "Viatura cadastrada com sucesso");
return new ModelAndView("redirect:viaturas");
}
}
JSP:
<%@ include file="/WEB-INF/views/header.jsp" %>
<form:form class="form-horizontal" role="form" action="${spring:mvcUrl('VC#save').arg(0,viatura).build()}" method="post" commandName="viatura" enctype="multipart/form-data">
<div class="col-sm-9 col-sm-offset-3 col-md-5 col-md-offset-2 main">
<div class="form-group row">
<div class="col-sm-5">
<label for="placa">Placa:</label>
<form:input class="form-control" placeholder=" Número da placa" path="placa"/>
<form:errors path="placa"/>
<label class="control-label" for="prefixo">Prefixo:</label>
<form:input class="form-control" placeholder="Número da frota" path="prefixo"/>
<form:errors path="prefixo"/>
<label class="control-label" for="modelo">Modelo:</label>
<form:input class="form-control" placeholder="Modelo do veículo" path="modelo"/>
<form:errors path="modelo"/>
<label class="control-label" for="patrimonio">Patrimônio:</label>
<form:input class="form-control" placeholder="Número de patrimônio" path="patrimonio"/>
<form:errors path="patrimonio"/>
<label class="control-label" for="marca">Marca:</label>
<form:select path="marca" class="form-control" >
<form:option value = "SELECIONE"/>
<form:options items="${marcas}" itemLabel="marca"/>
</form:select>
</br>
<label class="control-label" for="ativo">Ativo:</label>
<input type="checkbox" name="ativo" checked data-toggle="toggle" data-on="SIM" data-off="NÃO" />
<form:errors path="ativo"/>
</div>
<div class="col-sm-5">
<label for="ano">Ano:</label>
<form:input class="form-control" placeholder="Ano" path="ano"/>
<form:errors path="ano"/>
<label class="control-label" for="renavam">RENAVAM:</label>
<form:input class="form-control" placeholder="Número do renavam" path="renavam"/>
<form:errors path="renavam"/>
</br>
<div>
<button type="submit" class="btn btn-primary" value="Salvar">
<span class="glyphicon glyphicon-floppy-disk"></span> Salvar
</button>
</div>
</div>
</div>
</div>