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.