Estou fazendo o cadastro de produtores e seus dependentes. Com isso, utilizei a relação OneToMany e ManyToOne.
package br.unemat.digera.models;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@ManagedBean
@Entity
public class Produtor {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String nome;
private String cpf;
private String sexo;
private Date dataNasc;
private String estadoCivil;
private String escolaridade;
private BigDecimal renda;
private String profissao;
private String fone;
@OneToMany(mappedBy="produtores")
private List<Dependente> dependentes;
public Produtor(){}
public Produtor(Integer id){
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public Date getDataNasc() {
return dataNasc;
}
public void setDataNasc(Date dataNasc) {
this.dataNasc = dataNasc;
}
public String getEstadoCivil() {
return estadoCivil;
}
public void setEstadoCivil(String estadoCivil) {
this.estadoCivil = estadoCivil;
}
public String getEscolaridade() {
return escolaridade;
}
public void setEscolaridade(String escolaridade) {
this.escolaridade = escolaridade;
}
public BigDecimal getRenda() {
return renda;
}
public void setRenda(BigDecimal renda) {
this.renda = renda;
}
public String getProfissao() {
return profissao;
}
public void setProfissao(String profissao) {
this.profissao = profissao;
}
public String getFone() {
return fone;
}
public void setFone(String fone) {
this.fone = fone;
}
public List<Dependente> getDependentes() {
return dependentes;
}
public void setDependentes(List<Dependente> dependentes) {
this.dependentes = dependentes;
}
@Override
public String toString() {
return "Produtor [id=" + id + ", nome=" + nome + ", cpf=" + cpf + ", sexo=" + sexo + ", dataNasc=" + dataNasc
+ ", estadoCivil=" + estadoCivil + ", escolaridade=" + escolaridade + ", renda=" + renda
+ ", profissao=" + profissao + ", fone=" + fone + ", dependentes=" + dependentes + "]";
}
}
package br.unemat.digera.models;
import java.util.Date;
import javax.faces.bean.ManagedBean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@ManagedBean
@Entity
public class Dependente {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String nome;
private Date dataNasc;
private String grauParente;
private String sexo;
@ManyToOne
private Produtor produtores;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Date getDataNasc() {
return dataNasc;
}
public void setDataNasc(Date dataNasc) {
this.dataNasc = dataNasc;
}
public String getGrauParente() {
return grauParente;
}
public void setGrauParente(String grauParente) {
this.grauParente = grauParente;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public Produtor getProdutores() {
return produtores;
}
public void setProdutores(Produtor produtores) {
this.produtores = produtores;
}
@Override
public String toString() {
return "Dependente [id=" + id + ", nome=" + nome + ", dataNasc=" + dataNasc + ", grauParente=" + grauParente
+ ", sexo=" + sexo + ", produtores=" + produtores + "]";
}
}
Utilizei esse Bean para salvar os dependentes. Estou conseguindo salvar os produtores normalmente, utilizando xhtml com Primefaces. Porem, para salvar o dependente e ligar o Id do produtor ele não está identificando o Id, e deixa como nulo.
package br.unemat.digera.beans;
import java.util.List;
import javax.enterprise.inject.Model;
import javax.inject.Inject;
import javax.transaction.Transactional;
import br.unemat.digera.daos.DependenteDao;
import br.unemat.digera.daos.ProdutorDao;
import br.unemat.digera.models.Dependente;
import br.unemat.digera.models.Produtor;
@Model
public class AdminDependenteBean {
private Dependente dependente = new Dependente();
@Inject
private DependenteDao dao;
@Inject
private ProdutorDao produtorDao;
@Transactional
public void salvar(){
dao.salvar(dependente);
System.out.println("Dependente: " + dependente);
}
public List<Produtor> getProdutores(){
return produtorDao.listar();
}
public Dependente getDependente() {
return dependente;
}
public void setDependente(Dependente dependente) {
this.dependente = dependente;
}
}
<h:head>
</h:head>
<h:body>
<h:form>
<h:panelGrid columns="2" cellpadding="5">
<p:outputLabel value="Nome: " />
<p:inputText for="text" value="#{adminDependenteBean.dependente.nome}" style="width:300px"/>
<p:outputLabel for="german" value="Data Nasc:" />
<p:calendar id="german" value="#{adminDependenteBean.dependente.dataNasc}" locale="pt" navigator="true" pattern="dd/MM/yyyy" mask="true"/>
<p:outputLabel for="grau" value="Grau de Parentesco: " />
<p:inputMask id="grau" value="#{adminDependenteBean.dependente.grauParente}"/>
<p:outputLabel for="sexo" value="Sexo:" />
<p:selectOneRadio id="sexo" value="#{adminDependenteBean.dependente.sexo}">
<f:selectItem itemLabel="Masculino" itemValue="Masculino" />
<f:selectItem itemLabel="Feminino" itemValue="Feminino" />
</p:selectOneRadio>
<p:outputLabel for="produtores" value="Produtor:" />
<p:selectOneListbox id="produtores" value="#{adminDependenteBean.dependente.produtores}" >
<f:selectItems var="produtor" value="#{adminDependenteBean.produtores}"
itemValue="#{produtor.id}" itemLabel="#{produtor.nome}"/>
</p:selectOneListbox>
<p:commandButton value="Limpar" type="reset" />
<p:commandButton value="Cadastrar" action="#{adminDependenteBean.salvar}"/>
</h:panelGrid>
</h:form>
</h:body>
</html>
Alguem sabe de que forma posso resolver isso??