Iniciante com JPA...como configurar campo auto incremento e passar para outro objeto

Olá,

estou tentando converter DAO para JPA e estou com algumas duvidas

meu problema é como passar o codigo da nota fiscal que gera como auto incremento
no banco para tabela nota fiscal item conforme os fontes abaixo

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("1234567890");
    
    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
    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 10:59:45.749--ServerSession(18055655)--TopLink, version: Oracle TopLink Essentials - 2006.8 (Build 060830)
[TopLink Info]: 2008.11.12 10:59:46.938--ServerSession(18055655)--file:/D:/workspace_patt/Sushibar-pu2 login successful
java.lang.IllegalArgumentException: Object: bar.model.NotaFiscal@7eb6e2 is not a known entity type.
	at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:3178)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.persist(EntityManagerImpl.java:170)
	at bar.persistence.BaseDao1.create(BaseDao1.java:20)
	at bar.client.Client1.main(Client1.java:43)

Bom para funcionar o “auto increment” você precisa adicionar a Annotation abaixo na propriedade correspondente ao campo id da tabela.

@GeneratedValue(strategy = GenerationType.IDENTITY)Antes de se aventurar de cabeça em jpa te aconselho ler uma apostila em português, ela é bem completa e possui diversos exemplos.

Me manda uma msg em pvt para que eu possar enviar no seu email já que pelo site não dá devido ao tamanho do pdf.

Sem mais, Rodrigo.

Rodrigo,

Vvc pode enviar esta apostila pra mim tb? :smiley:

Tô apanhando pra uma parada q n sei se é, mas gostaria q fosse possível.

Tenho 3 tabelas, estão mapeadas … mas gostaria de fazer uma nova entidade
que mapeasse duas tabelas, estou usando o @SecondaryTable, mas n tem
dado muito certo.