Merge inserindo um novo registro
19/05/2010
0
José Filho
Posts
20/05/2010
Angelo Santos
Quando vc altera a chave de um registro , o "merge" entende como um novo registro.
Tenta usar o update().
Até.
20/05/2010
José Filho
bom, é o seguinte, o meu salvar tá assim:
if (novoRegistro == true) { empresaDao.salvar(empresa); FacesUtils.mensErro("Registro Salvo com Sucesso!"); } else { empresaDao.atualizar(empresa); FacesUtils.mensErro("Registro Atualizado com Sucesso!"); } return "sucesso";
e o atualizar:
[CODE[
@Transactional(readOnly=false,propagation=Propagation.REQUIRED)
public T atualizar(T object) {
getEntityManager().merge(object);
return object;
}
[/CODE]
esqueci de mencionar q estou usando Spring, JPA.
20/05/2010
José Filho
bom, é o seguinte, o meu salvar tá assim:
if (novoRegistro == true) { empresaDao.salvar(empresa); FacesUtils.mensErro("Registro Salvo com Sucesso!"); } else { empresaDao.atualizar(empresa); FacesUtils.mensErro("Registro Atualizado com Sucesso!"); } return "sucesso";
e o atualizar:
[CODE[
@Transactional(readOnly=false,propagation=Propagation.REQUIRED)
public T atualizar(T object) {
getEntityManager().merge(object);
return object;
}
[/CODE]
esqueci de mencionar q estou usando Spring, JPA.
20/05/2010
José Filho
22/05/2010
Dyego Carmo
utilize o comando UPDATE mesmo... (o JPA suporta o comando UPDATE)
Trocar chaves de tabela alem de nao ser comum não é algo indicado..
24/05/2010
José Filho
@Transactional(readOnly=false,propagation=Propagation.REQUIRED) public T atualizar(T object) { getEntityManager().update(object); return object; }
The method update(T) is undefined for the type EntityManager.
E agora?
25/05/2010
Dyego Carmo
public T atualizar(T object) {
getEntityManager().update(object);
return object;
}
para:
public <T> T atualizar(T object) {
getEntityManager().update(object);
return object;
}
e teste
26/05/2010
José Filho
@Transactional(readOnly=true,propagation=Propagation.REQUIRED) public class DaoGenericoImp<T,ID extends Serializable> implements DaoGenerico<T, ID> { private EntityManager entityManager; private final Class<T> oClass; @SuppressWarnings("unchecked") public DaoGenericoImp(){ this.oClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } @Override @Transactional(readOnly=false,propagation=Propagation.REQUIRED) public <T> T atualizar(T object) {
getEntityManager().update(object);
return object;
} @Override @Transactional(readOnly=false,propagation=Propagation.REQUIRED) public void excluir(T object) { object = getEntityManager().merge(object); getEntityManager().remove(object); } @Override public Class<T> getObjectClass() { return this.oClass; } @SuppressWarnings("unchecked") @Override public List<T> listPesq(String query) { Query q = getEntityManager().createQuery(query); return q.getResultList(); } @SuppressWarnings("unchecked") @Override public List<T> listPesqParam(String query, Map<String, Object> params) { Query q = getEntityManager().createQuery(query); for(String chave:params.keySet()){ q.setParameter(chave, params.get(chave)); } return q.getResultList(); } @SuppressWarnings("unchecked") @Override public List<T> listPesqParam(String query, Map<String, Object> params, int maximo, int atual) { Query q = getEntityManager().createQuery(query).setMaxResults(maximo).setFirstResult(atual); for(String chave:params.keySet()){ q.setParameter(chave, params.get(chave)); } return q.getResultList(); } @SuppressWarnings("unchecked") @Override public T pesqParam(String query, Map<String, Object> params) { Query q = getEntityManager().createQuery(query); for(String chave : params.keySet()){ q.setParameter(chave, params.get(chave)); } try{ return (T)q.getSingleResult(); }catch(NoResultException nre){ return null; } } @Override public T pesquisarPorId(ID id) { return (T)getEntityManager().find(oClass, id); } @Override @Transactional(readOnly=false,propagation=Propagation.REQUIRED) public T salvar(T object) { getEntityManager().clear(); getEntityManager().persist(object); return object; } @SuppressWarnings("unchecked") @Override public List<T> todos() { String queryS = "SELECT obj FROM "+oClass.getSimpleName(); Query query = getEntityManager().createQuery(queryS); return query.getResultList(); } @SuppressWarnings("unchecked") @Override public List<T> todos(int ordem) { String queryS = "SELECT obj FROM "+oClass.getSimpleName()+" obj ORDER BY "+ordem; Query query = getEntityManager().createQuery(queryS); return query.getResultList(); } @PersistenceContext public void setEntityManager(EntityManager em) { this.entityManager = em; } public EntityManager getEntityManager() { if (entityManager == null) throw new IllegalStateException("Erro"); return entityManager; } }
e o erro:
Multiple markers at this line - The method atualizar(T) of type DaoGenericoImp<T,ID> must override or implement a supertype method - Name clash: The method atualizar(T) of type DaoGenericoImp<T,ID> has the same erasure as atualizar(T) of type DaoGenerico<T,ID> but does not override it - The type parameter T is hiding the type T
03/06/2010
José Filho
28/08/2010
Carlos Mazzi
06/09/2010
Dyego Carmo
public <T> T atualizar(T object) {
getEntityManager().update(object);
return object;
}
por:
public <T> T atualizar(T object) {
return getEntityManager().update(object);
}
e teste por favor :)
SUPERCAT METHODS = Uma implementação de superclasse.
Clique aqui para fazer login e interagir na Comunidade :)