Buscar Objeto para Edição - VRaptor + Hibernate

E ae galera, preciso de uma ajuda. :?:

Estou tentando fazer a parte de edição de uma entidade do meu sistema mas não estou conseguindo. Ja fiz cadastro, buscar todos e excluir, e estou com duvida nessa parte.

Devo passar apenas o id do objeto para buscar no banco e criar um método na casse “DAOTvCamara”, por exemplo ou passar um objeto e criar um método genérico na classe AbstractDAO ?? Também pensei na possibilidade de passar o objeto inteiro para o controller e ele retornar direto para a view de edição. Seria certo?

VIEW

<td>
     <form id="form_editar" action='<c:url value="/mapcontrole/editartv" />' method="post">
          <input type='hidden' name='tvDto.id' value='${item.id}'/>
          <input type="submit" value="Editar"/>
     </form>
</td>

No momento estou passando um objeto instanciado com apenas o id valorado e tentando fazer uma busca por criteria no método AbstractDAO.

[code]public T buscarPorId(T obj) throws Exception {

    Session sessao = null;

        sessao = getSessionFactory().openSession();
    
    try {
        sessao = getSessionFactory().openSession();
        
       return (T) sessao.createCriteria(obj.getClass())
                .add(Restrictions.idEq(obj)).uniqueResult();
    } catch (Exception e) {
        throw new Exception("Erro ao buscar por id - Camada AbstractDAO" + e.getMessage());
    } finally{
        sessao.close();
    }
}[/code]

Porem como o id passado fica como Integer e ele no banco esta como LONG ele não consegue converter e lança um erro.
OBS.: Estou utilizando VO e DTO nos models.

ERRO:
java.lang.ClassCastException: org.hibernate.internal.CriteriaImpl cannot be cast to br.com.chavantes.camara.tvcamara.vo.TvCamaraVO

o classCastException que está acontecendo não é por causa do id… é por causa das chamadas que vc tá fazendo… qual é a stacktrace dessa exception? qual é a primeira classe que aparece na stack que é da sua aplicação?

Cara, obrigado pela resposta, mas ja resolvi aqui.

Estava com erro na hora de passar o id, que foi um erro de digitação.

Depois arumei outro erro na minha criteria.

Antes estava comparando pelo Restrictions.eqId(). Depois mudei e deu bom.

sessao.createCriteria(obj.getClass())
          .add(Restrictions.eq("id", id))
          .uniqueResult();

Valeu Lucas.

[RESOLVIDO]