Ejb 3 não atualiza as dependencias no banco

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.

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

segue uma imagem do ciclo de vida da entidade JPA

[editado]

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

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.

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

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;
}

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

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.

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

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)

[quote=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)[/quote] Só uma coisa, não precisa de @ManyToOne(fetch = FetchType.EAGER).

EAGER já é o default. [=