Prezados,
estou tentando salvar os dados de um formulário no banco, só que ele me retorna essa mensagem “object references an unsaved transient instance - save the transient instance before flushing: … entity.CursoEspecializacao”
Dei umas olhadas nos post ai e diziam que tinha que colocar cascade = CascadeType.ALL, só que não adiantou.
eu acho que sua entidade CursoEspecializacao está detached na hora de persistir, portanto pode ser necessário buscar a referência dela novamente.
algo assim:public void salvarPessoa(Pessoa pessoa) {
try {
pessoa.setCursoEspecializacao(entityManager.getReference(
CursoEspecializacao.class, pessoa.getCursoEspecializacao().getIdCursoEspecializacao()));
entityManager.merge(pessoa);
entityManager.flush();
} catch (Exception e) {
//TODO ...
}
}
[quote=nel]Cara, é EJB ou “na mão” mesmo ?
Tu não está presente em nenhum transação, por isso ele não consegue persistir, como se não houvesse um contexto.[/quote]
EJB mesmo
[quote=david.jv][quote=nel]Cara, é EJB ou “na mão” mesmo ?
Tu não está presente em nenhum transação, por isso ele não consegue persistir, como se não houvesse um contexto.[/quote]
EJB mesmo[/quote]
[quote=digaoneves]Adapte o código que eu passei de modo que possa tratar uma lista.
EDIT: Aliás, você tentou usar o persist ao invés do merge ?[/quote]
Merge também funciona. Ele vai identificar que não tem uma chave primária e persiste.
Estou achando que ele está usando uma classe comum e tentando injetar um EntityManager nela…posta a classe por completo colega, a que executa a persistência.
O que eu disse né…onde isso é um EJB ? Cadê as anotações ? Stateless? Statefull ? Singleton? Estou vendo nenhuma anotação EJB.
Isso dai nada mais é que um classe qualquer aos olhos de um servidor de aplicação colega…
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…
Mas faça o teste de forma coerente colega, senão isso não lhe trará os resultados esperados, e caso traga, pode ser apenas uma “enganação”. Se ele será um EJB, faça-o desde agora, é o correto.
Mas faça o teste de forma coerente colega, senão isso não lhe trará os resultados esperados, e caso traga, pode ser apenas uma “enganação”. Se ele será um EJB, faça-o desde agora, é o correto.[/quote]
++
Concordo plenamente. Na sua situação esse teste sem utilizar o EJB pode mais atrapalhar do que ajudar.