Duvida jPA....During synchronization a new object was found through a relationship that was not mark

0 respostas
P

Olá,

estou tentando converter DAO para JPA e estou com algumas duvidas

não consigo ver o erro…

se alguém puder me ajudar e se estou fazendo certo …

e o que está faltando para funcionar…

---script execucao

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
    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 (cascade=CascadeType.PERSIST)
	@JoinColumn(name="nrnota")
	private NotaFiscal nota;
	
	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 getNota() {
		return nota;
	}
	public void setNota(NotaFiscal nota) {
		this.nota = nota;
	}
	
	

}----
public class BaseDao1<T> {
  
  private static EntityManagerFactory emf;
  private EntityManager em;

  public BaseDao1() {
    emf = Persistence.createEntityManagerFactory("pu2");
    em = emf.createEntityManager();
  }

  public boolean create(T obj) {
    em.getTransaction().begin();
    try {
      em.persist(obj);
      em.getTransaction().commit();
      return true;
    }
    catch (Exception e) {
      e.printStackTrace();
      em.getTransaction().rollback();
      return false;
    }
  } 
}
--------------
[TopLink Info]: 2008.11.12 01:55:08.802--ServerSession(24417480)--TopLink, version: Oracle TopLink Essentials - 2006.8 (Build 060830)
[TopLink Info]: 2008.11.12 01:55:10.115--ServerSession(24417480)--file:/D:/workspace_patt/Sushibar-pu2 login successful
[TopLink Warning]: 2008.11.12 01:55:10.304--UnitOfWork(18724539)--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)
---

 <persistence-unit name="pu2">
        <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
        <class>bar.model.NotaFiscal</class>
        <class>bar.model.NotaFiscalItem</class>
        <properties>
            <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/loja"/>
            <property name="toplink.jdbc.user" value="root"/>
            <property name="toplink.jdbc.password" value="paribe"/>
            <property name="toplink.logging.level" value="INFO"/>
        </properties>
    </persistence-unit>
Criado 12 de novembro de 2008
Respostas 0
Participantes 1