Olá a todos, estou passando por um problema meio estranho ao utilizar um campo select. Na minha tela de cadastro de matérias o usuário precisa selecionar o tipo da matéria, sendo que o tipo da matéria é um campo obrigatório, então eu coloquei nele a anotação @NotNull, o problema acontece quando envio o formulário de cadastro de matéria sem selecionar nenhum tipo matéria, pois o form não envia null, ele está enviando um new TipoMateria(), ou seja ele não cai no bean validator e me dá um erro de org.hibernate.TransientPropertyValueException já que esse registro de tipo matéria não existe no banco de dados. Como contornar esse problema?
@Entity
@Table(name = "materia")
public class Materia implements Serializable{
@ManyToOne
@JoinColumn(name = "tipo_materia_id")
@NotNull
private TipoMateria tipoMateria;
}
<select name="materia.tipoMateria.tipoMateriaId"
id="tipos" class="form-control">
<option value=""></option>
<c:forEach items="${tipoMaterias}" var="tipo">
<option value="${tipo.tipoMateriaId}"
<c:if test="${materia.tipoMateria.tipoMateriaId == tipo.tipoMateriaId}">selected="selected"</c:if>>${tipo.nome}</option>
</c:forEach>
</select>
@Controller
public class MateriasController {
@Post("/materias")
public void salvarMateria(@Valid Materia materia){
validator.onErrorForwardTo(this).editar(materia);
}
}