JPA...Iniciante com problema...During synchronization a new object was found through a relationship

1 resposta
P

Olá,

estou com erro abaixo mas não estou vendo aonde tenho que acertar…

se alguem puder me ajudar

abs

[TopLink Info]: 2008.11.14 12:35:42.586--ServerSession(24417480)--TopLink, version: Oracle TopLink Essentials - 2006.8 (Build 060830)
[TopLink Info]: 2008.11.14 12:35:44.152--ServerSession(24417480)--file:/D:/workspace_patt/Sushibar-pu2 login successful
[TopLink Warning]: 2008.11.14 12:35:44.376--UnitOfWork(17427094)--java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST.
javax.persistence.RollbackException: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST.
	at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:109)
	at oracle.toplink.essentials.internal.ejb.cmp3.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:45)
	at bar.persistence.BaseDao1.create(BaseDao1.java:21)


--
public class Client1 {

  public static void main(String[] args) throws InterruptedException {

	Collection<NotaFiscalItem> itens= new ArrayList<NotaFiscalItem>();  
    BaseDao1<NotaFiscal> dao = new BaseDao1<NotaFiscal>();
    
    NotaFiscal n = new NotaFiscal();
    n.setDtemissao("11/11/2008");
    n.setDtsaida("11/11/2008");
    n.setNrcnpj("[telefone removido]");
    
    NotaFiscalItem i = new NotaFiscalItem();
    i.setNritemnota(1);
    i.setCodproduto(10);
    i.setQtdproduto(100);
    itens.add(i);
    i= new NotaFiscalItem();
    i.setNritemnota(2);
    i.setCodproduto(20);
    i.setQtdproduto(500);
    itens.add(i);
    
    n.setItens(itens);
    
       
    dao.create(n);
  }

}
---

@Entity
public class NotaFiscal {

	
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int nrnota;
	private String dtemissao;
	private String dtsaida;
    private String nrcnpj;
    
    @OneToMany(mappedBy="notaFiscal", fetch = FetchType.LAZY )
    
    private Collection<NotaFiscalItem> itens;
	public int getNrnota() {
		return nrnota;
	}
	public void setNrnota(int nrnota) {
		this.nrnota = nrnota;
	}
	public String getDtemissao() {
		return dtemissao;
	}
	public void setDtemissao(String dtemissao) {
		this.dtemissao = dtemissao;
	}
	public String getDtsaida() {
		return dtsaida;
	}
	public void setDtsaida(String dtsaida) {
		this.dtsaida = dtsaida;
	}
	public String getNrcnpj() {
		return nrcnpj;
	}
	public void setNrcnpj(String nrcnpj) {
		this.nrcnpj = nrcnpj;
	}
	public Collection<NotaFiscalItem> getItens() {
		return itens;
	}
	public void setItens(Collection<NotaFiscalItem> itens) {
		this.itens = itens;
	}
		 
}
----
@Entity
public class NotaFiscalItem {
	@Id
	private int iditem;
	private int nrnota; 
	private int nritemnota;
	private int codproduto;
	private int qtdproduto;
	
	@ManyToOne(fetch = FetchType.EAGER ,cascade=CascadeType.PERSIST)
	
	@JoinColumn(name="nrnota",	insertable=true, updatable=true)
	
	private NotaFiscal notaFiscal;
	
	public int getNrnota() {
		return nrnota;
	}
	public void setNrnota(int nrnota) {
		this.nrnota = nrnota;
	}
	public int getNritemnota() {
		return nritemnota;
	}
	public void setNritemnota(int nritemnota) {
		this.nritemnota = nritemnota;
	}
	public int getCodproduto() {
		return codproduto;
	}
	public void setCodproduto(int codproduto) {
		this.codproduto = codproduto;
	}
	public int getQtdproduto() {
		return qtdproduto;
	}
	public void setQtdproduto(int qtdproduto) {
		this.qtdproduto = qtdproduto;
	}
	public int getIditem() {
		return iditem;
	}
	public void setIditem(int iditem) {
		this.iditem = iditem;
	}
	public NotaFiscal getNotaFiscal() {
		return notaFiscal;
	}
	public void setNotaFiscal(NotaFiscal notaFiscal) {
		this.notaFiscal = notaFiscal;
	}
	
	
	

}

---

1 Resposta

R

Boa tarde,
Veja que no Pojo NotaFiscal você não está definindo para a lista NotaFiscalItem o cascade=CascadeType.PERSIST desta forma.
Assim você define que ele deverá persistir sempre uma a nota fiscal antes do Item para poder vincular o item a nota.

Ronaldo

Criado 14 de novembro de 2008
Ultima resposta 14 de nov. de 2008
Respostas 1
Participantes 2