Primeiro commit

Interfaces DaoRepository bastante semelhantes. O que poderia ter sido feito

Criei a classe Repository utilizando generics:

package br.com.quanta.procontratos.repositorio;

import java.util.List;

public interface Repository<T> {
 void salvar(T object);
List<T> pegarTodos();
T pegaPorId(Object object); // Pode ser uma String em Contrato ou um Long
em Fornecedor
void deletar(T object);
}

e implementei os DAO's da seguinte forma:

package br.com.quanta.procontratos.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.caelum.vraptor.ioc.Component;
import br.com.quanta.procontratos.modelo.Contrato;
import br.com.quanta.procontratos.repositorio.Repository;

@Component
public class ContratoDao implements Repository<Contrato> {

private final Session session;
 public ContratoDao(Session session) {
this.session = session;
}
 @Override
public void salvar(Contrato contrato) {
 session.merge(contrato);
 }

@SuppressWarnings("unchecked")
@Override
public List<Contrato> pegarTodos() {
ArrayList<Contrato> contratos = new ArrayList<>();
Query query = session.createQuery("from Contrato");
contratos = (ArrayList<Contrato>) query.list();
return contratos;
}

@Override
public void deletar(Contrato contrato) {
Contrato contratoTransient = pegaPorId((contrato).getNumero());
session.delete(contratoTransient);
}
 public Contrato pegaPorId(Object numero) {
Contrato contrato = (Contrato) session.get(Contrato.class, (String) numero);
return contrato;
}

}

package br.com.quanta.procontratos.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.caelum.vraptor.ioc.Component;
import br.com.quanta.procontratos.modelo.Fornecedor;
import br.com.quanta.procontratos.repositorio.Repository;

@Component
public class FornecedorDao implements Repository<Fornecedor> {

private final Session session;
 public FornecedorDao(Session session) {
this.session = session;
}
 @Override
public void salvar(Fornecedor fornecedor) {
session.merge(fornecedor);
}

@SuppressWarnings("unchecked")
@Override
public List<Fornecedor> pegarTodos() {
ArrayList<Fornecedor> fornecedores = new ArrayList<>();
Query query = session.createQuery("from Fornecedor");
fornecedores = (ArrayList<Fornecedor>) query.list();
return fornecedores;
}

@Override
public Fornecedor pegaPorId(Object id) {
Fornecedor fornecedor = (Fornecedor) session.get(Fornecedor.class, (Long)
id);
return fornecedor;
}

@Override
public void deletar(Fornecedor fornecedor) {
Fornecedor fornecedorTransient = pegaPorId(fornecedor.getId());
session.delete(fornecedorTransient);
}

}