| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2012 19:08:21
|
joaosavio
Java Ninja
![[Avatar]](/images/avatar/29345917cc8b62e71e973391840efca4.jpg)
Membro desde: 13/12/2007 10:09:22
Mensagens: 269
Offline
|
Olá pessoas!
Estou com um erro estranho de inserção duplicada em minha aplicacao. Vou resumir o problema e depois coloco os codigos.
Tenho as seguintes classes:
- TestEntity - entidade simples com um metodo @PrePersist que está permanecendo na transação apos ela ser comitada pelo container
- Auditoria - entidade de auditoria
- Dataset<T> - interface do DatasetBean<T>
- DatasetBean<T> - Stateless bean que implementa Dataset
- DatasetFactory - instancia um EJB de dataset (faz um lookup)
- PersistenceLifeCycleListener - um listener do ciclo de vida das entidades, definido no arquivo ORM.xml (segundo o site http://docs.jboss.org/hibernate/core/4.0/hem/en-US/html/listeners.html)
Coloquei o problema em um teste junit (estou usando Glassfish embedded):
O fluxo do teste é o seguinte:
1. Após ter um objeto Dataset realizo a inserção
2. Após a inserção, o listener PostPersist é chamado, e tento inserir uma entidade de auditoria. Aqui, se eu descomentar //dataset.getEntityManager().clear(), o teste passa. Caso contrário dá erro (log abaixo).
Log - reparem nas linhas 8 e 12, o hibernate insere a mesma entidade:
persistence.xml
orm.xml
TestEntity
Auditoria
Entidade
Uma gambiarra para resolver o problema é dar um clear no EntityManager. O que estou fazendo de errado?
This message was edited 5 times. Last update was at 05/01/2012 11:33:22
|
Mestrando em Ciência da Computação - UNICAMP
SCJP 6
http://joaosavio.wordpress.com |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2012 20:58:03
|
jakefrog
GUJ Expert
![[Avatar]](/images/avatar/6e2400ec18b6f1952f1053c65df7a8b6.png)
Membro desde: 22/01/2007 22:00:53
Mensagens: 4191
Offline
|
Faça um teste troque para auto:
@GeneratedValue(strategy = GenerationType.AUTO)
|
Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]
SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)
Vamos em frente que atrás vem gente! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2012 23:01:11
|
joaosavio
Java Ninja
![[Avatar]](/images/avatar/29345917cc8b62e71e973391840efca4.jpg)
Membro desde: 13/12/2007 10:09:22
Mensagens: 269
Offline
|
Mesmo erro
|
Mestrando em Ciência da Computação - UNICAMP
SCJP 6
http://joaosavio.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2012 23:19:29
|
joaosavio
Java Ninja
![[Avatar]](/images/avatar/29345917cc8b62e71e973391840efca4.jpg)
Membro desde: 13/12/2007 10:09:22
Mensagens: 269
Offline
|
Atualizei a descricao com o meu persistence.xml e retornei o método @PrePersist (original do problema). Tanto de um jeito quanto de outro da o mesmo problema
This message was edited 2 times. Last update was at 04/01/2012 23:46:53
|
Mestrando em Ciência da Computação - UNICAMP
SCJP 6
http://joaosavio.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2012 09:57:20
|
jakefrog
GUJ Expert
![[Avatar]](/images/avatar/6e2400ec18b6f1952f1053c65df7a8b6.png)
Membro desde: 22/01/2007 22:00:53
Mensagens: 4191
Offline
|
Agora que você falou desse @PrePersist que eu fui reparar.
Sua entidade está com @GeneratedValue(strategy = GenerationType.IDENTITY) e vc seta o ID dele na unha assim mesmo?
Você sabe como funciona o @GeneratedValue?
Retire essa linha e faça o teste.
|
Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]
SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)
Vamos em frente que atrás vem gente! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2012 11:30:08
|
joaosavio
Java Ninja
![[Avatar]](/images/avatar/29345917cc8b62e71e973391840efca4.jpg)
Membro desde: 13/12/2007 10:09:22
Mensagens: 269
Offline
|
Nao nao, o @PrePersist é so na TestEntity, e ela nao esta com @GeneratedValue
absss
|
Mestrando em Ciência da Computação - UNICAMP
SCJP 6
http://joaosavio.wordpress.com |
|
|
 |
|
|
|
|