@Bruno.Silveira escreveu:
Bom Dia !
Sou iniciante em JPA e estou com a seguinte dificuldade.
Minha aplicação tem um classe Bens e uma Classe doação.
No momento da doação eu seleciono vários bens.E o bem só pode ter uma doação.
Na minha interface eu coloco vários bens em uma lista porém quando eu gravo a operação ele só seta o id da doação e modifica o bem para doado no último item.Segue abaixo os fontes obrigado desde já.
DOAÇÃO MODELO:
package modelo; import java.io.Serializable; import java.util.Date; import java.util.List; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlRootElement; Entity Table(name = "doacao") XmlRootElement NamedQueries({ NamedQuery(name = "Doacao.findAll", query = "SELECT d FROM Doacao d"), NamedQuery(name = "Doacao.findByIdDoacao", query = "SELECT d FROM Doacao d WHERE d.idDoacao = :idDoacao"), NamedQuery(name = "Doacao.findByDataDoacao", query = "SELECT d FROM Doacao d WHERE d.dataDoacao = :dataDoacao"), NamedQuery(name = "Doacao.findByNomeSolicitante", query = "SELECT d FROM Doacao d WHERE d.nomeSolicitante = :nomeSolicitante"), NamedQuery(name = "Doacao.findByTelefoneSolicitante", query = "SELECT d FROM Doacao d WHERE d.telefoneSolicitante = :telefoneSolicitante"), NamedQuery(name = "Doacao.findByEmailSolicitante", query = "SELECT d FROM Doacao d WHERE d.emailSolicitante = :emailSolicitante")}) public class Doacao implements Serializable { Column(name = "data_retirada") Temporal(TemporalType.DATE) private Date dataRetirada; private static final long serialVersionUID = 1L; Id GeneratedValue(strategy = GenerationType.IDENTITY) Basic(optional = false) Column(name = "id_doacao") private Integer idDoacao; Column(name = "data_doacao") Temporal(TemporalType.DATE) private Date dataDoacao; Size(max = 50) Column(name = "nome_solicitante") private String nomeSolicitante; Size(max = 255) Column(name = "telefone_solicitante") private String telefoneSolicitante; Size(max = 255) Column(name = "email_solicitante") private String emailSolicitante; JoinColumn(name = "id_colaborador", referencedColumnName = "id_colaborador") ManyToOne private Colaborador idColaborador; JoinColumn(name = "id_parceiro", referencedColumnName = "id_parceiros") ManyToOne private Parceiros idParceiro; OneToMany(cascade={CascadeType.MERGE}, mappedBy = "doacaoIdDoacao") private List<Bens> bensDoacaoList; DOAÇÃO BEAN: ackage MB; import DAO.BensDAO; import DAO.DoacaoDAO; import infra.JPAUtil; import java.util.ArrayList; import java.util.List; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import javax.persistence.EntityManager; import modelo.Bens; import modelo.Doacao; @ViewScoped @ManagedBean(name="doacaoBean") public class DoacaoBean{ private Doacao doacao = new Doacao(); private EntityManager entity = new JPAUtil().getEntityManager(); private DoacaoDAO dao = new DoacaoDAO(entity); private BensDAO bensDao = new BensDAO(entity); private List<Doacao> doacaos; private Bens itBens = new Bens(); private ArrayList<Bens> bensDoados = new ArrayList(); public void grava() { System.out.println("entrou no gravar"); if(!entity.getTransaction().isActive()){ entity.getTransaction().begin(); } if (doacao.getIdDoacao() == null) { itBens.setDisponibilidade("Doado"); itBens.setDoacaoIdDoacao(doacao); bensDao.atualiza(itBens); dao.adiciona(doacao); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "Registro gravado com Sucesso!.")); this.doacao = new Doacao(); this.doacaos = dao.lista(); } else { System.out.println("atualiza Doacao"); dao.atualiza(doacao); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Doação alterada: ","")); this.doacao = new Doacao(); this.doacaos = dao.lista(); } entity.getTransaction().commit(); } public Bens getItBens() { return itBens; } public void setItBens(Bens itBens) { this.itBens = itBens; } public List<Bens> getBensDoados() { return bensDoados; } public void setBensDoados(ArrayList<Bens> bensDoados) { this.bensDoados = bensDoados; } public List<Doacao> getDoacaos() { doacaos = dao.lista(); System.out.println("lista"); return doacaos; } public Doacao getDoacao() { return doacao; } public void setDoacao(Doacao doacao) { this.doacao = doacao; } public DoacaoDAO getDao() { return dao; } public void setDao(DoacaoDAO dao) { this.dao = dao; } public EntityManager getEntity() { return entity; } public void setEntity(EntityManager entity) { this.entity = entity; } public void remove(Doacao doacao){ try { System.out.println("entrou no remove"); entity.getTransaction().begin(); dao.remove(doacao); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "Doacao Excluída.")); this.doacaos = dao.lista(); entity.getTransaction().commit(); } catch (Exception e) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro", "Erroa ao excluir, pois Existe bens relacionados com Doação ")); } } public void addBensDoacao(Bens bensDoa){ boolean opcao = true; if(!entity.getTransaction().isActive()){ entity.getTransaction().begin(); } itBens = bensDoa; itBens.setDisponibilidade("Doado"); //itBens.setDoacaoIdDoacao(doacao); if(doacao.getBensDoacaoList()==null){ System.out.println("Grava 1"); bensDoados.add(itBens); doacao.setBensDoacaoList(bensDoados); //doacao.getBensDoacaoList().add(itBens); }else{ System.out.println("Grava 2"); System.out.println("ja tem bens"); for (int i = 0; i < doacao.getBensDoacaoList().size(); i++) { System.out.println("percorrendo o for" + i); if (doacao.getBensDoacaoList().get(i).getIdBen() == itBens.getIdBen()) { System.out.println("Grava 3"); System.out.println(doacao.getBensDoacaoList().get(i).getIdBen() +" = "+ itBens.getIdBen()); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro ao Adicionar", "Bem já Adicionado anteriormente")); opcao = false ; } } if(opcao){ bensDoados.add(itBens); doacao.setBensDoacaoList(bensDoados); // doacao.getBensDoacaoList().add(itBens); System.out.println("Grava 4"); } } //bensDao.atualiza(itBens); }
desde já obrigado.
Mensagens: 1
Participantes: 1