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.