Iniciante Hibernate..duvida de como mapear Nota fiscal X Nota Fiscal Item

Folks,

estou querendo converter DAO para Hibernate e estou com umas duvidas
e queria ver se estou no caminho certo .
E estou tentando configurar no Hibernate nota fiscal X nota fiscal item e pintou umas duvidas :

  • quando gero a notafiscal o numero da nota é automatico como pego esse numero
    e passo para geração notafiscalitem , na classe GerenciadorNotaFiscal como criar o metodo pra tratar essa situação gravar a nota e depois item da nota

  • e se o que montei está certo ou se existe outra forma de fazer como estou fazendo testes
    gostaria de saber o certo pra fazer a conversão de DAO para Hibernate

Se alguém puder me ajudar …agradeceria

abs

--

public class TestaNotaFiscal {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		NotaFiscal nota = new NotaFiscal();
		nota.setDtemissao("05/11/2008");
		nota.setDtsaida("05/11/2008");
		nota.setNrcnpj("123456789");
		
		
		NotaFiscalItem item = new NotaFiscalItem();
		item.setCodproduto(10);
		item.setNritemnota(1);
		item.setQtdproduto(100);
		
		GerenciadorNotaFiscal g = new GerenciadorNotaFiscal();
		g.salvaNotaFiscal(nota,item);
		
		
		
	}

}

--
public class GerenciadorNotaFiscal {
	public void salvaNotaFiscal (NotaFiscal nota,NotaFiscalItem item){
		
		try{
			
			SessionFactory sf = new Configuration().configure("br/com/uso/model/hibernate.cfg.xml").buildSessionFactory();
			Session s = sf.openSession();
			Transaction tx = s.beginTransaction();
			
			tx.commit();
			s.close();
			System.out.println("Categoria Incluido");

			
			
		}catch(Exception e){
			System.out.println("Erro ="+e);
		}
	}
	
--
--NotaFiscal.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
		"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

	<class name="br.com.uso.model.NotaFiscal" table="notafiscal">
	  <id name="nrnota" column="nrnota" type="int">
	  	<generator class="native"/>
	  </id>
	  <property name="dtemissao"/>
	  <property name="dtsaida"/>
	  <property name="nrcnpj"/>
	  
	  <set  name="itens" table="notafiscalitem" >
	      <key column="nrnota"/> 
	      <one-to-many   class=" br.com.uso.model.NotaFiscalItem"/>
	  </set>
	 </class>
</hibernate-mapping>

-----

DROP TABLE IF EXISTS `loja`.`notafiscal`;
CREATE TABLE  `loja`.`notafiscal` (
  `nrnota` int(10) unsigned NOT NULL auto_increment,
  `dtemissao` varchar(10) NOT NULL,
  `dtsaida` varchar(10) NOT NULL,
  `nrcnpj` varchar(45) NOT NULL,
  PRIMARY KEY  (`nrnota`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

----------
DROP TABLE IF EXISTS `loja`.`notafiscalitem`;
CREATE TABLE  `loja`.`notafiscalitem` (
  `nrnota` int(10) unsigned NOT NULL,         // referencia com o numero da nota 
  `nritemnota` int(10) unsigned NOT NULL,   // numero do item da nota
  `codproduto` int(10) unsigned NOT NULL,
  `qtdproduto` int(10) unsigned NOT NULL,
  `iditem` int(10) unsigned NOT NULL auto_increment, // codigo automatico da tabela
  PRIMARY KEY  (`iditem`),
  KEY `FK_notafiscalitem_1` (`nrnota`),
  CONSTRAINT `FK_notafiscalitem_1` FOREIGN KEY (`nrnota`) REFERENCES `notafiscal` (`nrnota`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
------
public class NotaFiscal {

    private int nrnota;
	private String dtemissao;
	private String dtsaida;
    private String nrcnpj;
    
    Set item = new HashSet();
    
	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 Set getItem() {
		return item;
	}
	public void setItem(Set item) {
		this.item = item;
	}
---

Amigo,

Segue algumas considerações q tenho qnto a este modelo q está usando:

  • no seu mapeamento do hibernate, vc criou um set chamado itens e na sua classe NotaFiscal vc criou um set chamado item; acredito que o nome no mapeamento tenha q ser o mesmo que vc colocar na sua classe java;
  • nao entendi mto bem o seu método salvaNotaFiscal, vc recebe seus dois objetos, porém nao estou vendo vc salvando os mesmos em nenhum momento;
  • talvez para esta sua situação seja mais interessante usar um List na sua classe NotaFiscal, esse list seria um List<NotaFiscalItem>, desta maneira vc consegue adicionar o seu objeto NotaFiscalItem nesta lista para salvá-la; no seu mapeamento no xml vc consegue trocar de set para lista sem mtos problemas;
  • ao invés de passar seus dois objetos, NotaFiscal e NotaFiscalItem, eu passaria apenas o NotaFiscal e dentro deste conteria a lista de NotaFiscalItem. Desta maneira o hibernate consegue salvar os dois objetos no banco;
  • no seu mapeamento do hibernate vc nao mapeou a classe NotaFiscalItem, acredito que seja necessário mapeá-la.

Tente ver esses pontos que falei e tendo mais dúvidas, posta ae q tentamos ajudar :smiley:

obrigado pelo retorno.

Mais seguinte sua ideia de criar classe nota fiscal com List (itens) como faço o mapeamento no xml da Nota Fiscal

e como vai ser gerado o numero da nota fiscal automatico pelo banco tanto para nota fiscal e para nota fiscal item ???

São minhas duvidas ???