O Hibernate está levantando esta exceção:
org.hibernate.exception.GenericJDBCException: Field 'codPais' doesn't have a default value
a aplicação tem três Entidades: Filhos N : 1 Pais N : 1 Endereco
O ManagedBean de Filhos(que levanta a exceção) está assim:
@ManagedBean
public class FilhosBean {
private Filhos filhos = new Filhos();
private Integer codigoPais;
private List<Filhos> listaFilhos;
public void adiciona() {
EntityManager manager = this.getManager();
PaisRepositorio paisRepositorio = new PaisRepositorio(manager);
FilhosRepositorio filhosRepositorio = new FilhosRepositorio(manager);
if (this.codigoPais != null) {
Pais pai = paisRepositorio.procura(this.codigoPais);
this.filhos.setPais(pai);
}
if (this.filhos.getCodFilho() == null) {
filhosRepositorio.adiciona(filhos);
} else {
filhosRepositorio.atualiza(filhos);
}
this.filhos = new Filhos();
this.listaFilhos = null;
}
public void preparaAlteracao() {
Map<String, String> params = FacesContext.getCurrentInstance()
.getExternalContext().getRequestParameterMap();
Integer id = Integer.parseInt(params.get("id"));
EntityManager manager = this.getManager();
FilhosRepositorio repository = new FilhosRepositorio(manager);
this.filhos = repository.procura(id);
}
public void remove() {
Map<String, String> params = FacesContext.getCurrentInstance()
.getExternalContext().getRequestParameterMap();
Integer id = Integer.parseInt(params.get("id"));
EntityManager manager = this.getManager();
FilhosRepositorio repository = new FilhosRepositorio(manager);
repository.remove(id);
this.listaFilhos = null;
}
private EntityManager getManager() {
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
HttpServletRequest request = (HttpServletRequest) ec.getRequest();
return (EntityManager) request.getAttribute("EntityManager");
}
public Filhos getFilhos() {
return filhos;
}
public void setFilhos(Filhos filho) {
this.filhos = filho;
}
public Integer getCodigoPais() {
return codPais;
}
public void setCodigoPais(Integer codPais) {
this.codPais = codPais;
}
public List<Filhos> getListaFilhos() {
if (this.listaFilhos == null) {
EntityManager manager = this.getManager();
FilhosRepositorio repository = new FilhosRepositorio(manager);
this.listaFilhos = repository.getLista();
}
return this.listaFilhos;
}
public void setListaFilhos(List<Filhos> filhos) {
this.listaFilhos = filhos;
}
}
A tela de cadastro:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui=" http://java.sun.com/jsf/facelets"
xmlns:h=" http://java.sun.com/jsf/html"
xmlns:f=" http://java.sun.com/jsf/core">
<h:inputHidden value="#{filhosBean.filhos.codFilho}"/>
<h:panelGrid columns="3">
<h:outputLabel value="Nome do Aluno:" for="nomeFilho"/>
<h:inputText id="nomeFilho" required="true"
requiredMessage="O nome do aluno e obrigatorio"
value="#{filhosBean.filhos.nomeAluno}">
</h:inputText>
<h:message for="nomeFilho"/>
<h:outputLabel value="Numero Matricula: " for="matricula"/>
<h:inputText id="matricula" required="true"
requiredMessage="O numero da Matricula e obrigatoria"
value="#{filhosBean.filhos.numMatricula}">
</h:inputText>
<h:message for="matricula"/>
<h:outputLabel value="Data de Nascimento:"
for="nascimentoFilho"/>
<h:inputText id="nascimentoFilho" required="true"
requiredMessage=" Informe a data de nascimento do aluno"
value="#{filhosBean.filhos.dataNascimento.time}">
<f:convertDateTime pattern="dd/MM/yyyy"/>
</h:inputText>
<h:message for="nascimentoFilho"/>
<h:outputLabel value="Pais:" for="pais"/>
<h:selectOneMenu id="pais"
value="#{filhosBean.codPais}">
<f:selectItems value="#{paisBean.pais}" var="pais"
itemLabel="#{pais.nomePai}" itemValue="#{pais.codPais}"/>
</h:selectOneMenu>
<h:message for="pais"/>
<h:commandButton value =" Salva " action ="#{filhosBean.adiciona()}"/>
<h:commandButton value="Cadastrar" styleClass="botao-formulario">
<f:ajax event="click" execute="@form"
listener="#{filhosBean.adiciona}" render="@form"/>
</h:commandButton>
</h:panelGrid>
</ui:composition>
Repositório:
public class FilhosRepositorio implements IRepositorio<Filhos>{
private EntityManager manager;
public FilhosRepositorio(EntityManager manager) {
this.manager = manager;
}
@Override
public void adiciona(Filhos filho){
this.manager.persist(filho);
}
@Override
public void remove(Integer id){
Filhos filho = this.procura(id);
this.manager.remove(filho);
}
@Override
public Filhos atualiza(Filhos filho){
return this.manager.merge(filho);
}
@Override
public Filhos procura(Integer id){
return this.manager.find(Filhos.class,id);
}
@Override
public List<Filhos> getLista(){
Query query = this.manager.createQuery("SELECT x FROM filhos x");
return query.getResultList();
}
}