Boa noite pessoal.
Estou utilizando hibernate e JSF + Primefaces e estou tendo um problema.
Quando tento editar um objeto ele faz um insert ao invés de executar um update.
Segue abaixo o código:
@ManagedBean
@RequestScoped
public class DocumentoBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Aluno aluno;
private Documento documento;
private boolean readOnly;
private DocumentoDaoImp dao;
public DocumentoBean() {
dao = new DocumentoDaoImp();
String doc = Util.getParametro("id");
aluno = (Aluno)SystemBean.getUsuario();
if(doc != null){
documento = dao.getById(Long.parseLong(doc));
if(documento != null){
if(!aluno.equals(documento.getDono())){
if(documento.isPublico()){
readOnly = true;
documento.incVisualizacoes();
}else{
CompartilhamentoDaoImp compDao = new CompartilhamentoDaoImp();
Compartilhamento comp = compDao.get(documento, aluno);
if(comp != null){
readOnly = !comp.isEscrita();
documento.incVisualizacoes();
}else{
dao.cancel();
Util.erro("Você não tem permissão para acessar este documento");
}
}
}else{
documento.incVisualizacoes();
}
}else{
Util.erro("Documento não encontrado");
}
}else{
documento = new Documento();
documento.setDono(aluno);
}
}
public void salvar(ActionEvent actionEvent){
dao.save(documento);
}
//getters e setters
}
e a classe que uso para a persistência:
public class GenericDaoImp<T> implements GenericDao<T> {
@Override
public T save(T object) {
try{
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
Transaction t = session.beginTransaction();
Object obj = session.merge(object);
t.commit();
session.close();
return (T) obj;
}catch(HibernateException e){
cancel();
throw e;
}
}
}
O que estou fazendo de errado?