Olá pessoal
Seguinte:
Tenho
Um receptor
Vários doadores
Um atendimento
Posso cadastrar indistintamente receptores e doadores.
Mas, na tela de “atendimento”, teria de associar vários doadores a apenas um receptor, e a eles um atendimento.
A idéia é que na tela de receptor, pudesse normalmente cadastrar um receptor e o mesmo acontecer no doador, embora no atendimento, possa associá-los lembrando das considerações acima.
O problema é que consigo apenas cadastarar o receptor e não o doador.
na tabela atendimento todos os valores estão corretos, assim como no receptor referentes aos mesmos, mas no caso de doador o campo id_atendimento está sempre vazio.
Entidade Doador
package br.com.agets.dominio;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "doador")
public class Doador implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
@ManyToOne
private Atendimento atendimento;
@Column(name = "nomeDoador")
private String nomeDoador;
@Column(name = "tipoHemoDerivados")
@Enumerated(EnumType.STRING)
private TipoHemoderivado tipoHemo;
@Column(name = "tipoSanguineo")
@Enumerated(EnumType.STRING)
private TipoSanguineo tipoSanguineo;
@Column(name = "dataEntrada")
@Temporal(TemporalType.DATE)
private Date dataEntrada;
@Column(name = "numDoacao")
private String numeroDoacao;
@Column(name = "produto")
private String produto;
@Column(name = "volume")
private String volume;
@Column(name = "PAI")
private String PAI;
@Column(name = "sifilis", insertable = false, length = 13)
private String sifilis;
@Column(name = "chagas", insertable = false, length = 13)
private String chagas;
@Column(name = "epatiteB", insertable = false, length = 13)
private String epatiteB;
@Column(name = "epatiteC", insertable = false, length = 13)
private String epatiteC;
@Column(name = "HIV", insertable = false, length = 13)
private String HIV;
@Column(name = "HTLV", insertable = false, length = 13)
private String HTLV;
@Column(name = "destino")
@Enumerated(EnumType.STRING)
private TipoDestino destino;
@Column(name = "Obs")
private String Observacoes;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Atendimento getAtendimento() {
return atendimento;
}
public void setAtendimento(Atendimento atendimento) {
this.atendimento = atendimento;
}
public String getNomeDoador() {
return nomeDoador;
}
public void setNomeDoador(String nomeDoador) {
this.nomeDoador = nomeDoador;
}
public TipoHemoderivado getTipoHemo() {
return tipoHemo;
}
public void setTipoHemo(TipoHemoderivado tipoHemo) {
this.tipoHemo = tipoHemo;
}
public Date getDataEntrada() {
return dataEntrada;
}
public void setDataEntrada(Date dataEntrada) {
this.dataEntrada = dataEntrada;
}
public String getNumeroDoacao() {
return numeroDoacao;
}
public void setNumeroDoacao(String numeroDoacao) {
this.numeroDoacao = numeroDoacao;
}
public String getProduto() {
return produto;
}
public void setProduto(String produto) {
this.produto = produto;
}
public String getVolume() {
return volume;
}
public void setVolume(String volume) {
this.volume = volume;
}
public String getPAI() {
return PAI;
}
public void setPAI(String pAI) {
PAI = pAI;
}
public String getSifilis() {
return sifilis;
}
public void setSifilis(String sifilis) {
this.sifilis = sifilis;
}
public String getChagas() {
return chagas;
}
public void setChagas(String chagas) {
this.chagas = chagas;
}
public String getEpatiteB() {
return epatiteB;
}
public void setEpatiteB(String epatiteB) {
this.epatiteB = epatiteB;
}
public String getEpatiteC() {
return epatiteC;
}
public void setEpatiteC(String epatiteC) {
this.epatiteC = epatiteC;
}
public String getHIV() {
return HIV;
}
public void setHIV(String hIV) {
HIV = hIV;
}
public String getHTLV() {
return HTLV;
}
public void setHTLV(String hTLV) {
HTLV = hTLV;
}
public TipoDestino getDestino() {
return destino;
}
public void setDestino(TipoDestino destino) {
this.destino = destino;
}
public String getObservacoes() {
return Observacoes;
}
public void setObservacoes(String observacoes) {
Observacoes = observacoes;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Doador other = (Doador) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
public TipoSanguineo getTipoSanguineo() {
return tipoSanguineo;
}
public void setTipoSanguineo(TipoSanguineo tipoSanguineo) {
this.tipoSanguineo = tipoSanguineo;
}
}
Entidade Receptor
package br.com.agets.dominio;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "receptor")
public class Receptor implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
@Column(name = "nomeReceptor")
private String nomeReceptor;
@Column(name = "nomeHospital")
private String nomeHospital;
@Column(name = "numProntuario")
private String numProntuario;
@Column(name = "tipoSanguineo")
@Enumerated(EnumType.STRING)
private TipoSanguineo tipoSanguineo;
@OneToOne(mappedBy = "receptor", cascade = CascadeType.ALL)
private Atendimento atendimento;
@Column(name = "RH")
private String RH;
@Column(name = "PAI")
private String PAI;
@Column(name = "numDoacao")
private String numDoacao;
@Column(name = "hemoDerivados")
@Enumerated(EnumType.STRING)
private TipoHemoderivado tipoHemo;
@Column(name = "volume")
private String volume;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNomeReceptor() {
return nomeReceptor;
}
public void setNomeReceptor(String nomeReceptor) {
this.nomeReceptor = nomeReceptor;
}
public String getNomeHospital() {
return nomeHospital;
}
public void setNomeHospital(String nomeHospital) {
this.nomeHospital = nomeHospital;
}
public String getNumProntuario() {
return numProntuario;
}
public void setNumProntuario(String numProntuario) {
this.numProntuario = numProntuario;
}
public TipoSanguineo getTipoSanguineo() {
return tipoSanguineo;
}
public void setTipoSanguineo(TipoSanguineo tipoSanguineo) {
this.tipoSanguineo = tipoSanguineo;
}
public String getRH() {
return RH;
}
public void setRH(String rH) {
RH = rH;
}
public String getPAI() {
return PAI;
}
public void setPAI(String pAI) {
PAI = pAI;
}
public String getNumDoacao() {
return numDoacao;
}
public void setNumDoacao(String numDoacao) {
this.numDoacao = numDoacao;
}
public TipoHemoderivado getTipoHemo() {
return tipoHemo;
}
public void setTipoHemo(TipoHemoderivado tipoHemo) {
this.tipoHemo = tipoHemo;
}
public String getVolume() {
return volume;
}
public void setVolume(String volume) {
this.volume = volume;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Receptor other = (Receptor) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
public Atendimento getAtendimento() {
return atendimento;
}
public void setAtendimento(Atendimento atendimento) {
this.atendimento = atendimento;
}
}
Entidade Atendimento
package br.com.agets.dominio;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "atendimento")
public class Atendimento implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
@OneToMany(mappedBy = "atendimento")
private List<Doador> doadores;
public List<Doador> getDoadores() {
return doadores;
}
public void setDoadores(List<Doador> doadores) {
this.doadores = doadores;
}
@OneToOne(cascade = CascadeType.ALL)
private Receptor receptor;
@Column(name = "dataAtendimento")
@Temporal(TemporalType.DATE)
private Date dataAtendimento;
@Column(name = "numOrdem")
private String numeroOrdem;
@Column(name = "testeCompatibilidade")
private boolean testeCompatibilidade;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Receptor getReceptor() {
return receptor;
}
public Date getDataAtendimento() {
return dataAtendimento;
}
public void setDataAtendimento(Date dataAtendimento) {
this.dataAtendimento = dataAtendimento;
}
public String getNumeroOrdem() {
return numeroOrdem;
}
public void setNumeroOrdem(String numeroOrdem) {
this.numeroOrdem = numeroOrdem;
}
public boolean isTesteCompatibilidade() {
return testeCompatibilidade;
}
public void setTesteCompatibilidade(boolean testeCompatibilidade) {
this.testeCompatibilidade = testeCompatibilidade;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Atendimento other = (Atendimento) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
public void setReceptor(Receptor receptor) {
this.receptor = receptor;
}
}
MBean
package br.com.agets.visao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.SelectItem;
import org.richfaces.component.UIExtendedDataTable;
import br.com.agets.dominio.Atendimento;
import br.com.agets.dominio.Doador;
import br.com.agets.dominio.Receptor;
import br.com.agets.dominio.TipoHemoderivado;
import br.com.agets.dominio.TipoSanguineo;
import br.com.agets.negocio.AtendimentoService;
import br.com.agets.negocio.DoadorService;
import br.com.agets.negocio.ReceptorService;
import br.com.agets.negocio.RegraNegocioException;
@ManagedBean(name = "atendimentoBean")
@SessionScoped
public class AtendimentoBean {
private Atendimento atendimentoEdicao;
private List<Atendimento> atendimentos = new ArrayList<Atendimento>();
private List<SelectItem> tiposHemoderivados;
private List<SelectItem> tiposSanguineos;
private List<SelectItem> doadores;
private List<SelectItem> receptores;
private List<Doador> ListaDoadores;
private List<Receptor> ListaReceptores;
private Collection<Object> selection;
private List<Receptor> selectionItems = new ArrayList<Receptor>();
public String inicializar() {
this.atendimentoEdicao = new Atendimento();
this.tiposHemoderivados = null;
this.tiposSanguineos = null;
this.atendimentos = null;
this.receptores = null;
this.doadores = null;
this.ListaReceptores = null;
this.ListaDoadores = null;
return "incluirAtendimento2";
}
public Collection<Object> getSelection() {
return selection;
}
public void setSelection(Collection<Object> selection) {
this.selection = selection;
}
public List<Receptor> getSelectionItems() {
return selectionItems;
}
public void setSelectionItems(List<Receptor> selectionItems) {
this.selectionItems = selectionItems;
}
public void selectionListener(AjaxBehaviorEvent event) {
System.out.println("CHamando o método de seleção");
UIExtendedDataTable dataTable = (UIExtendedDataTable) event.getComponent();
Object originalKey = dataTable.getRowKey();
selectionItems.clear();
for (Object selectionkey : selection) {
dataTable.setRowKey(selectionkey);
if (dataTable.isRowAvailable()) {
selectionItems.add((Receptor) dataTable.getRowData());
}
}
dataTable.setRowKey(originalKey);
}
public void salvar(ActionEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
try {
new AtendimentoService().salvar(this.atendimentoEdicao);
this.atendimentoEdicao = new Atendimento();
FacesMessage msg = new FacesMessage("Atendimento Cadastrado com sucesso!");
msg.setSeverity(FacesMessage.SEVERITY_INFO);
context.addMessage(null, msg);
} catch (RegraNegocioException e) {
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
} catch (Exception e) {
e.printStackTrace();
FacesMessage msg = new FacesMessage("Erro inesperado ao cadastrar atendimento! " + e.getMessage());
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage(null, msg);
}
}
public List<String> sugerirNomeReceptor(Object event) {
return new ReceptorService().pesquisarReceptores(event.toString());
}
public void excluir() {
FacesContext context = FacesContext.getCurrentInstance();
try {
new AtendimentoService().excluir(this.atendimentoEdicao);
this.atendimentos.remove(this.atendimentoEdicao);
FacesMessage msg = new FacesMessage("Atendimento excluÃdo com sucesso!");
msg.setSeverity(FacesMessage.SEVERITY_INFO);
context.addMessage(null, msg);
} catch (RegraNegocioException e) {
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
} catch (Exception e) {
e.printStackTrace();
FacesMessage msg = new FacesMessage("Erro inesperado ao excluir atendimento!");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage(null, msg);
}
}
public List<Receptor> getListaReceptores() {
if (this.ListaReceptores == null) {
this.ListaReceptores = new ReceptorService().listarTodos();
}
return this.ListaReceptores;
}
public List<Doador> getListaDoadores() {
if (this.ListaDoadores == null) {
this.ListaDoadores = new DoadorService().listarTodos();
}
return this.ListaDoadores;
}
public List<SelectItem> getDoadores() {
if (this.doadores == null) {
this.doadores = new ArrayList<SelectItem>();
List<Doador> doadores = new DoadorService().listarTodos();
this.doadores.add(new SelectItem(null, "Selecione"));
for (Doador doador : doadores) {
this.doadores.add(new SelectItem(doador, doador.getNomeDoador()));
}
}
return this.doadores;
}
public List<SelectItem> getReceptores() {
if (this.receptores == null) {
this.receptores = new ArrayList<SelectItem>();
List<Receptor> receptores = new ReceptorService().listarTodos();
this.receptores.add(new SelectItem(null, "Selecione"));
for (Receptor receptor : receptores) {
this.receptores.add(new SelectItem(receptor, receptor.getNomeReceptor()));
}
}
return receptores;
}
public List<SelectItem> getTiposHemoderivados() {
if (this.tiposHemoderivados == null) {
this.tiposHemoderivados = new ArrayList<SelectItem>();
this.tiposHemoderivados.add(new SelectItem(null, "Selecione"));
for (TipoHemoderivado tipos : TipoHemoderivado.values()) {
this.tiposHemoderivados.add(new SelectItem(tipos.toString()));
}
}
return tiposHemoderivados;
}
public List<SelectItem> getTiposSanguineos() {
if (this.tiposSanguineos == null) {
this.tiposSanguineos = new ArrayList<SelectItem>();
this.tiposSanguineos.add(new SelectItem(null, "Selecione"));
for (TipoSanguineo tipos : TipoSanguineo.values()) {
this.tiposSanguineos.add(new SelectItem(tipos.toString()));
}
}
return tiposSanguineos;
}
public Atendimento getAtendimentoEdicao() {
return atendimentoEdicao;
}
public void setAtendimentoEdicao(Atendimento atendimentoEdicao) {
this.atendimentoEdicao = atendimentoEdicao;
}
public List<Atendimento> getAtendimentos() {
return atendimentos;
}
public void setAtendimentos(List<Atendimento> atendimentos) {
this.atendimentos = atendimentos;
}
public void setListaDoadores(List<Doador> listaDoadores) {
ListaDoadores = listaDoadores;
}
public void setTiposHemoderivados(List<SelectItem> tiposHemoderivados) {
this.tiposHemoderivados = tiposHemoderivados;
}
public void setTiposSanguineos(List<SelectItem> tiposSanguineos) {
this.tiposSanguineos = tiposSanguineos;
}
public void setDoadores(List<SelectItem> doadores) {
this.doadores = doadores;
}
public void setReceptores(List<SelectItem> receptores) {
this.receptores = receptores;
}
/**
* @param listaReceptores
* the listaReceptores to set
*/
public void setListaReceptores(List<Receptor> listaReceptores) {
ListaReceptores = listaReceptores;
}
}
Página
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html 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"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta>
<title>Cadastro de atendimentos</title>
</h:head>
<h:body>
<f:view>
<h1>
<h:outputText value="Cadastro de atendimentos"></h:outputText>
</h1>
<h:form>
<a4j:poll render="mensagem" interval="5000"></a4j:poll>
<h:messages layout="table" showSummary="true" showDetail="false"
id="mensagem" globalOnly="true" styleClass="msgErro"
infoClass="msgInfo" style="font-weight: bold" />
<h:panelGrid columns="2">
<h:outputLabel value="Código:"
rendered="#{atendimentoBean.atendimentoEdicao.id !=null}" />
<h:panelGroup
rendered="#{atendimentoBean.atendimentoEdicao.id !=null}">
<h:inputText required="true" id="codigo_ate"
value="#{atendimentoBean.atendimentoEdicao.id}"
label="Código do atendimento" disabled="true" />
<h:message for="codigo_ate" showSummary="true" showDetail="false" />
</h:panelGroup>
<h:outputLabel value="Data do atendimento" />
<h:panelGroup>
<rich:calendar id="dataentrada" enableManualInput="true"
value="#{atendimentoBean.atendimentoEdicao.dataAtendimento}"
required="true" requiredMessage="Este valor é obrigatório"
locale="pt_BR" datePattern="dd/MM/yyyy">
<h:message for="dataentrada" showSummary="true" showDetail="false">
</h:message>
</rich:calendar>
</h:panelGroup>
<h:outputLabel value="Número de ordem" />
<h:panelGroup>
<h:inputText id="numordem"
value="#{atendimentoBean.atendimentoEdicao.numeroOrdem}"
required="true" size="40"
requiredMessage="Este valor é obrigatório" />
<h:message for="numordem" showSummary="true" showDetail="false"
styleClass="msgErro">
</h:message>
</h:panelGroup>
<h:outputLabel value="Teste de compatibilidade" />
<h:panelGroup>
<h:selectOneRadio id="compatibilidade" required="true"
requiredMessage="Este valor é obrigatório"
value="#{atendimentoBean.atendimentoEdicao.testeCompatibilidade}"
label="Teste de compatibilidade" layout="pageDirection">
<f:selectItem itemValue="true" itemLabel="Aprovado" />
<f:selectItem itemValue="false" itemLabel="Reprovado" />
</h:selectOneRadio>
<h:message for="compatibilidade" showSummary="true"
showDetail="false" styleClass="msgErro">
</h:message>
</h:panelGroup>
<h:outputLabel value="Receptor" />
<h:panelGroup>
<h:commandButton value="Definir Receptor">
<rich:componentControl target="popup" operation="show"></rich:componentControl>
</h:commandButton>
</h:panelGroup>
<h:outputLabel value="Receptor" />
<h:panelGroup>
<h:selectOneMenu id="receptor"
value="#{atendimentoBean.atendimentoEdicao.receptor}"
label="receptor" converter="receptorConverter" required="false"
requiredMessage="Este valor é obrigatório">
<f:selectItems value="#{atendimentoBean.receptores}"></f:selectItems>
</h:selectOneMenu>
</h:panelGroup>
<h:outputLabel value="Doador" />
<h:panelGroup>
<h:selectManyListbox id="doador"
value="#{atendimentoBean.atendimentoEdicao.doadores}"
label="receptor" converter="doadorConverter" required="false"
requiredMessage="Este valor é obrigatório">
<f:selectItems value="#{atendimentoBean.doadores}"></f:selectItems>
</h:selectManyListbox>
</h:panelGroup>
<rich:popupPanel id="popup" modal="false" resizeable="true">
<f:facet name="header">
<h:outputText value="Defina o Receptor"></h:outputText>
</f:facet>
<f:facet name="controls">
<h:outputLink value="#" style="text-decoration:none;"
onclick="#{rich:component('popup')}.hide(); return false;">X</h:outputLink>
</f:facet>
</rich:popupPanel>
<h:outputLabel value="Nome do Receptor Escolhido" />
<h:outputText id="dados"
value="#{atendimentoBean.atendimentoEdicao.receptor.nomeReceptor}" />
</h:panelGrid>
<h:commandButton value="Salvar"
actionListener="#{atendimentoBean.salvar}" />
<h:commandButton value="Voltar" immediate="true" action="menu" />
</h:form>
</f:view>
</h:body>
</html>
DAO
package br.com.agets.dao.hibernate;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.hibernate.Session;
import br.com.agets.dao.GenericDAO;
public abstract class HibernateGenericDAO<T> implements GenericDAO<T> {
private Class<T> persistentClass;
private Session session;
@SuppressWarnings("unchecked")
public HibernateGenericDAO(Session session) {
this.session = session;
this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
public Session getSession() {
return this.session;
}
@SuppressWarnings("unchecked")
public T pesquisarPorId(Serializable id) {
return (T) this.session.get(this.persistentClass, id);
}
@SuppressWarnings("unchecked")
public List<T> listarTodos() {
return this.session.createCriteria(this.persistentClass).list();
}
@SuppressWarnings("unchecked")
public T salvar(T entidade) {
return (T) this.session.merge(entidade);
}
public void excluir(T entidade) {
this.session.delete(entidade);
}
}