Autor
Mensagem
Pessoal, tudo blz,
é o seguinte, possuo algumas tabelas q suas chaves são atribuidas manualmente (eu sei q não é legal, mas é necessário), o problema é q quando mudo a chave e mando atualizar através do merge, ele faz é inserir um novo registro com os dados, o q eu posso fazer pra isso não acontecer?
Obrigado
Oi Angelo, blz cara,
bom, é o seguinte, o meu salvar tá assim:
[CODE]
if (novoRegistro == true) {
empresaDao.salvar(empresa);
FacesUtils.mensErro("Registro Salvo com Sucesso!");
} else {
empresaDao.atualizar(empresa);
FacesUtils.mensErro("Registro Atualizado com Sucesso!");
}
return "sucesso";
[/CODE]
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.
bom, é o seguinte, o meu salvar tá assim:
[CODE]
if (novoRegistro == true) {
empresaDao.salvar(empresa);
FacesUtils.mensErro("Registro Salvo com Sucesso!");
} else {
empresaDao.atualizar(empresa);
FacesUtils.mensErro("Registro Atualizado com Sucesso!");
}
return "sucesso";
[/CODE]
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.
Oi Angelo, blz cara,
bom, é o seguinte, o meu salvar tá assim:
[CODE]
if (novoRegistro == true) {
empresaDao.salvar(empresa);
FacesUtils.mensErro("Registro Salvo com Sucesso!");
} else {
empresaDao.atualizar(empresa);
FacesUtils.mensErro("Registro Atualizado com Sucesso!");
}
return "sucesso";
[/CODE]
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.
bom, é o seguinte, o meu salvar tá assim:
[CODE]
if (novoRegistro == true) {
empresaDao.salvar(empresa);
FacesUtils.mensErro("Registro Salvo com Sucesso!");
} else {
empresaDao.atualizar(empresa);
FacesUtils.mensErro("Registro Atualizado com Sucesso!");
}
return "sucesso";
[/CODE]
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.
Dyego, tentei fazer o q vc disse, trocar o merge por update, mas não deu certo:
@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?
#Código
@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?
Dyego, quando coloquei o q vc disse deu erro, vou colocar a classe toda:
@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
#Código
@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:
#Código
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







