Object references an unsaved transient instance

O banco de dados é mysql e a PK de pessoa segue abaixo:

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "idPessoa", unique = true, nullable = false) private Integer idPessoa;

Vou fazer o que você falou. Obrigado pelo toque.

[quote]
Eu faria duas mudanças ai:

1 - Tirar esse unique. Já tem o @Id, é óbvio que será unique.

2 - Trocaria o GenerationType.IDENTITY por GenerationType.AUTO. Já tive problemas com o modo IDENTITY, não é 100% confiável. E já testei com MySQL, Oracle, SQL Server…[/quote]

Vou fazer essas alterações. Mas pq o IDENTITY não é 100% ?

Ao que me recordo brevemente, parece que ele tem problemas com banco que não possuem a implementação de auto incremento ou até mesmo não estejam configurado para o mesmo, por isso aconselho a devida alteração. Particularmente, já tive problemas com o mesmo.

Me desculpe pela demora em retornar ao fórum, tive problemas com minha internet.
Bem, primeiro agradeço ao nel por explicar o motivo. Fiz as alterações que vc falou.

digaoneves, tentei fazer a alteração que você falou, só que não deu certo.
Não dá pra mim fazer um getIdCursoEspecializacao(), pq é um list.
Tentei passar a class CursoEspecializacao por parâmetro, mas não deu certo.

[quote]
public void salvarPessoa(Pessoa pessoa) {
try {
pessoa.setCursoEspecializacao(entityManager.getReference(
CursoEspecializacao.class, pessoa.getCursoEspecializacao().getIdCursoEspecializacao())); // O erro está aqui.
entityManager.merge(pessoa);
entityManager.flush();
} catch (Exception e) {
//TODO …
}
}[/quote]

public void salvarPessoa(Pessoa pessoa, CursoEspecializacao cursoEspecializacao) { try { pessoa.setCursoEspecializacao(entityManager.getReference( CursoEspecializacao.class, cursoEspecializacao.getIdCursoEspecializacao())); // O erro está aqui. entityManager.merge(pessoa); entityManager.flush(); } catch (Exception e) { //TODO ... } }

Se vcs tirem alguma outra solução