Ejb 3 não atualiza as dependencias no banco

10 respostas
Flavio_machine

Eu tenho uma classe Usuario com a dependencia Setor Atendimento quando eu atualizo o nome ele atualiza no banco mais quando eu atualizo o setor de atendimento ele atualiza no entity manage mais nao atualiza no banco, ou seja no jsf ele mostra como atualizado se clicar em alterar o registro vai estar com o novo setar mais no banco não muda.
Alguém ja passou por isso ?
Obrigado.

10 Respostas

igor_ks

Sim, teu objeto esta “desatachado”, desaclopado, de um merge pra atualizar

segue uma imagem do ciclo de vida da entidade JPA

[editado]

Hebert_Coelho

Como igor_ks disse falta ou colocar o cascade como merge ou então chamar o merge manualmente no objeto.

Flavio_machine

eu estou fazendo assim

public T update(T entity) {

getEntityManager().merge(entity);

return entity;

}
public String salvar() {

try{

if(entity.getId() == 0){

facede.create(entity);

}else{

System.out.println(entity.getSetorAtendimento().getId());

facede.update(entity);

System.out.println(entity.getSetorAtendimento().getId());

}

Mensagem.addInfSalvo();

return /tabelaUsuario;

}catch (Exception e) {

Mensagem.addErroFatal();

return null;

}

}

No System.out ele imprime o id certo mais nao salva no banco. A entidade SetorAtendimento esta salva no banco. Não esta detached.

Hebert_Coelho

Coloque só as classes com seus relacionamentos por favor? Não precisa colocar os outros atributos. só isso mesmo.

Flavio_machine

Isso jakefrog, só uma pergunta eu configurei o persistence assim e estou usando o Glassfish 3.1 só de fazer isso ja está funcionando o hibernate ?

<properties>
<property name=“hibernate.hbm2ddl.auto” value=“validate”/>

&lt;property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/&gt;
  &lt;property name="hibernate.show_sql" value="true"/&gt;
  &lt;property name="hibernate.format_sql" value="false"/&gt;
  &lt;property name="hibernate.use_sql_comments" value="false"/&gt;
&lt;/properties&gt;
@ManyToOne(fetch = FetchType.LAZY)

@JoinColumn(name = setor_atendimento_id)

public SetorAtendimento getSetorAtendimento() {

return this.setorAtendimento;

}
public void setSetorAtendimento(SetorAtendimento setorAtendimento) {
	this.setorAtendimento = setorAtendimento;
}
Hebert_Coelho

Repare que seu update está sendo chamado Usuário e não no Setor Atendimento.
Ou você faz o update no Setor Atendimento ou então coloca o CascadeType.MERGE no seu relacionamento ManyToOne

Flavio_machine

Valeu Jake, fiz assim.

@ManyToOne(cascade = {CascadeType.MERGE},fetch = FetchType.LAZY)

@JoinColumn(name = setor_atendimento_id)

public SetorAtendimento getSetorAtendimento() {

return this.setorAtendimento;

}

E deu essa exception.

Exception [EclipseLink-7251] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.ValidationException
Exception Description: The attribute [id] of class [br.com.prsistemas.entities.SetorAtendimento] is mapped to a primary key column in the database. Updates are not allowed.

E dai tive certeza de não estar usando o Hibernate, vc sabe como configurar o Glassfish para usar ele ?

E a exception não entendi só porque é uma PK não funciona.

E como eu faria um update no Setor Atendimento utilizado o usuário ?

Obrigado, pela força.

Flavio_machine

Achei um artigo aqui para configurar o hibernate, vou testar
http://www.k19.com.br/artigos/configurando-hibernate-no-glassfish-3-1/

Flavio_machine

Deu certo instalei o hibernate no glassfish.

Coloquei isso no persistence.xml

<provider>org.hibernate.ejb.HibernatePersistence</provider>

E mudei o

@ManyToOne(fetch = FetchType.LAZY) para @ManyToOne(fetch = FetchType.EAGER)

Hebert_Coelho

Flavio machine:
Deu certo instalei o hibernate no glassfish.

Coloquei isso no persistence.xml

<provider>org.hibernate.ejb.HibernatePersistence</provider>

E mudei o

@ManyToOne(fetch = FetchType.LAZY) para @ManyToOne(fetch = FetchType.EAGER)

Só uma coisa, não precisa de @ManyToOne(fetch = FetchType.EAGER).

EAGER já é o default. [=

Criado 21 de junho de 2012
Ultima resposta 21 de jun. de 2012
Respostas 10
Participantes 3