Dúvida na camada de Negócio

0 respostas
T

Estou com uma duvida na implementação da camada de negócio da minha aplicação.
Minha camada de negócio é dividida em 4 pacotes : Service, Repository, Dao, Entity.

O pacote Entity possui minhas classes bean do hibernate.

Entity:
@Entity
@Table(name="bovinos")
public class Bovino{
    @Id
    @SequenceGenerator(name="bovinos_id_bovi_seq", sequenceName="bovinos_id_bovi_seq")
    @GeneratedValue(generator="bovinos_id_bovi_seq")
    @Column( nullable = false)
    private long id_bovi;
    @Column(length=6)
    private String manejo;
    @Column(length=15)
    private String sisbov;
....
    @OneToMany(fetch = FetchType.LAZY,  mappedBy = "pk.bovino",cascade={CascadeType.ALL})
    private List<BovinoNf> BovinosNotaFiscal = new LinkedList<BovinoNf>();
A tabela BovinoNF é uma tabela N para N com atributo.
@Entity
@Table(name="bovino_nf")
@AssociationOverrides
({
     @AssociationOverride(name = "pk.bovino", joinColumns = @JoinColumn(name = "id_bovi")),
     @AssociationOverride(name = "pk.notaFiscal", joinColumns = @JoinColumn(name = "id_nf_bovino"))
})
public class BovinoNf{
     
     private nfBovinosPK pk = new nfBovinosPK();
     private String tipo_nota;

    @EmbeddedId
    private nfBovinosPK getPk() {
        return pk;
    }

    private void setPk(nfBovinosPK pk) {
        this.pk = pk;
    }

    @Transient
    public Bovino getBovino(){
        return getPk().getBovino();
    }
    
    public void setBovino(Bovino bovino){
        getPk().setBovino(bovino);
    }

    @Transient
    public NotaFiscalBovino getNotaFiscal(){
        return getPk().getNotaFiscal();
    }

    public void setNotaFiscal(NotaFiscalBovino notaFiscal){
        getPk().setNotaFiscal(notaFiscal);
    }
    
    public String getTipo_nota() {
        return tipo_nota;
    }

    public void setTipo_nota(String tipo_nota) {
        this.tipo_nota = tipo_nota;
    }
....
}

class nfBovinosPK implements Serializable {

    private Bovino bovino;
    private NotaFiscalBovino notaFiscal;
        @ManyToOne
        public Bovino getBovino() {
            return bovino;
        }

        public void setBovino(Bovino bovino) {
            this.bovino = bovino;
        }
        @ManyToOne
        public NotaFiscalBovino getNotaFiscal() {
            return notaFiscal;
        }

        public void setNotaFiscal(NotaFiscalBovino notafiscal) {
            this.notaFiscal = notafiscal;
        }
...

    }
sendo assim faço assim na inclusão da mesma.
BovinoNf pk = new BovinoNf();
        pk.setBovino(bovino);
        pk.setNotaFiscal(notafiscalbovino);
        pk.setTipo_nota("ENTRADA");
        sessao.save(bovino);//salvo o bovino separado
        sessao.save(pk); //salvo a nota fiscal separada

Minha classe serviço é a implementação da interface Reporsitory(que recebe um Dao)

@Service(value="BovinoService")
@RemotingDestination
public class BovinoService {
	BovinoRepository bovinoRepository;
	@Autowired
	public void setAlunoRepository(BovinoRepository bovinoRepository){
	this.bovinoRepository = bovinoRepository;
	}
	@Transactional
	public void save(Bovino bovino){
		bovinoRepository.save(bovino);
	}
	@Transactional
	public void remove(Bovino bovino){
		bovinoRepository.remove(bovino);
	}
	@Transactional
	public List<Bovino> findAll(){
		return bovinoRepository.findAll();
	}
	@Transactional
	public List<Bovino> findBySisbov(String sisbov){
		return bovinoRepository.findByName(sisbov);
	}
....
}

Ao salvar um Bovino é necessário que salve na tabela N:N o bovino e a notaFiscal do mesmo, que pode ser de Entrada ou Saida.

Muitas das minhas tabelas do banco de dados possui tabelas N:N com atributo.
Assim necessariamente terei que criar vários métodos na minha classe do tipo Service como :

@Transactional
	public void save(Bovino bovino){
		alunoRepository.save(bovino);
	}
       @Transactional
	public void save(Bovino bovino,BovinoNf bovinoNf){
		bovinoRepository.save(bovino);
                bovinoNfRepository.save(bovinoNf);

	}
       @Transactional
	public void save(Bovino bovino,BovinoNf bovinoNf, Peso peso){
		bovinoRepository.save(bovino);
                bovinoNfRepository.save(bovinoNf);
                bovinoNfRepository.save(peso);
	}
.....

Só no cadastro de um bovino e alteração possui muitas tabelas N:N com atributo.
Imagina o resto da aplicação...

Como resolver esse problema?

Criado 8 de fevereiro de 2011
Respostas 0
Participantes 1