A different object with the same identifier value was already associated with the session:

Não consigo deletar um objeto de uma lista(List ) contida em um Paciente.

Pelo que li em outros tópicos, o motivo é que o hibernate não excluí objetos que estão na sua sessão(Pq? é isso msm ou entendi errado?), como eu lodei o Paciente ele trouxe as atividadesFisica contidas nele, assim, não consigo excluir a atividadeFisica

Meu cenário.

@Entity
public class Paciente {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

	@OneToMany
	@Cascade(value = { CascadeType.ALL })
	private Set<AtividadeFisica> atividadesFisica;

    //...

    public void addAtividadeFisica(AtividadeFisica atividadeFisica) {
		getAtividadesFisica().add(atividadeFisica);
	}
	
	public void removeAtividadeFisica(AtividadeFisica atividadeFisica) {
		getAtividadesFisica().remove(atividadeFisica);
	}
}
@Resource
public class AtividadeFisicaController {

    @Delete("/paciente/{paciente.id}/atividadeFisica/{atividadeFisica.id}")
    public void deleta(Paciente paciente, AtividadeFisica atividadeFisica) {
	   paciente = pacientes.load(paciente.getId());
	   paciente.removeAtividadeFisica(atividadeFisica);
       pacientes.update(paciente);
	   atividadesFisica.delete(atividadeFisica);
	   result.nothing();
    }

}

Como eu deveria proceder nesse caso? Já que dessa forma eu não consigo remover uma atividade contida em um paciente.

esqueci de dizer que a transação está sendo aberta a cada requisição!

Pensei em criar uma notação @NotTransaction e passar uma transação para o DAO… mas aí começa a criar coisas desnecessárias…

alguém aí sabe qual o problema do hibernate não deixar eu excluir uma atividadeFisica?

alguém?

E aí Kadu,beleza?

O EntityManager não consegue remover entidades que não estão inseridas no seu contexto gerenciável,a entidade entra nesse contexto quando é recuperada do banco ou quando é passada como parâmetro para o método merge.
Os relacionamentos @OneToMany tem por padrão a propriedade fetch com o valor LAZY(o bicho é preguiçoso msm),isso quer dizer que o jpa não vai recuperar as entidades associadas à esta.Para que vc “force” a recuperação das Atividades Físicas a propriedade fetch deve ser setada como EAGER.Observe:

@OneToMany   
@Cascade(value = { CascadeType.ALL },fetch=FetchType.EAGER)   
private Set<AtividadeFisica> atividadesFisica;

Mas a sua exceção pode não ser por isso,poste a implementação dos métodos de update,remove,etc.
Se eu tiver falado bobagem me corrijam aí!
abraço!