Problema ao alterar entidade

Bom, estou trabalhando com JSF 2.0, JPA, EJB e Richfaces 4.1M4 (pretendo mudar pra final assim que arrumar meus problemas agora).

Explicando o problema.
Ao alterar qualquer usuario do sistema, todos os projetos desse usuario somem, mas apenas na hora de mostrar, não no banco de dados. Ainda não entendi o que é, já que os projetos da entidade Usuario não tem nada dizendo que vai persistir. E também que todos os ManagedBeans estão como RequestScope.
Pelo que estou vendo aqui no debug, a entidade perde os projetos que eram mappedBy, até mesmo quando se faz uma nova requisição do mesmo usuario. Os projetos só voltam a aparecer quando uma nova sessão é aberta.

Bom, estou com uma entidade de usuarios assim:

Usuario.java

public class Usuario implements Serializable {

	private static final long serialVersionUID = -6385449045819412398L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	@Column(unique=true)
	private String email;
	private String nome;
	private String sobrenome;
	private String empresa;
	private String fone;
	private String senha;
	@Enumerated(EnumType.STRING)
	private UserType tipo;
	
	@ManyToMany(mappedBy="usuarios")
	private List<Projeto> projetos;

        //Getters and Setters.
}

E no Projeto.java temos o seguinte:

...
@ManyToMany
 @JoinTable(name="usuario_projeto",
            joinColumns=@JoinColumn(name="id_projeto"),
            inverseJoinColumns=@JoinColumn(name="id_usuario"))
private List<Usuario> usuarios;
...

E na hora de salvar ele faz isso:

public void save() {
	if(usuario.getId() == null) {
		try {
			this.usuario = usuarioService.insertUsuario(usuario);
			super.addMessage(FacesMessage.SEVERITY_INFO, "action.insert.success");
		} catch (BusinessException e) {
			super.addMessage(FacesMessage.SEVERITY_ERROR, e.getErrorMessages().get(0).getKey());
		}
	} else {
		this.usuario = usuarioService.updateUsuario(usuario);
		super.addMessage(FacesMessage.SEVERITY_INFO, "action.update.success");
	}
}

Onde insertUsuario(usuario) faz um em.persist(usuario) e updateUsuario() faz um em.merge().

Qualquer coisa a mais, só pedir.

  1. EJB não fica sendo RequestedScope, Apenas ManagedBeans. EJBs podem ser Stateles ou Statefull
  2. Altera para @ManyToMany(mappedBy=“usuarios”, fetch=FetchType.EAGER)

Na minha assinta tem posts falando sobre relacionamentos caso você precise entender melhor.

Desculpe, eu confundi aqui as coisas na hora de postar mesmo, vou alterar ali para deixar dados corretos na pesquisa…

Bom, coloquei o fetch eager como você disse, porem não funcionou. Continua não aparecendo os projetos do usuario logo após ele ser salvo, como disse anteriormente, só aparece quando eu começo uma outra sessão.

Mas obrigado pela ajuda, vou dar uma olhada nos links, quem sabe venha uma luz divina e me ajude nos bugs para lançar esse projeto logo.

Tenta fazer assim.

Na entidade Usuario.
@OneToMany(mappedBy=“usuario”)

Na entidade Projeto.

@OneToMany(mappedBy="projeto")

@ManyToOne()
@JoinColumn(referencedColumnName="id",columnDefinition="integer")
private Usuario usuario;

Eu nem testei ainda o que você falou, mas se fizer eu sei que vou perder minha tabela de relacionamento. No caso tem uma tablea “projeto_usuario” no banco de dados que faz a ligação entre eles. Ou estou errado?

Perfeito ai fica +/- assim :

@Entity
@Table
public class AtividadeExecutor implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
@Basic(optional=false)
private Integer id;

@NotNull()
@Min(0)    
@Column(nullable=false,precision=12, scale=2)
private BigDecimal vlexecutor;

@ManyToOne()
@JoinColumn(referencedColumnName="id",columnDefinition="integer")
private Atividade atividade;

@ManyToOne()
@JoinColumn(referencedColumnName="id",columnDefinition="integer")
private Usuario executor;