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>