Problema com Sequence's no JPA

1 resposta
V

Salve galera,

É o seguinte, estava usando um tal de CRANK na minha aplicação e nesse framework tem um método que me retorna o SEQUENCE que mandei pesquisar no banco.
Só que eu não quero usar esse cara, tentei colocar o sequence como anotação e não funcionou. Alguem sabe como que resolve o problema abaixo? Tem alguma outra maneira de chamar o sequence do banco se ser por anotação?
Segue uma parte do meu código:

@Table(name = "CONEXAO", schema = "ATMC", uniqueConstraints = {})
@SequenceGenerator(name="SEQ", sequenceName="SQ_CONEXAO", initialValue=1, allocationSize=1)
public class Conexao implements java.io.Serializable{

@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ")
	@Column(name = "COD_CONEXAO", unique = true, nullable = false, insertable = true, updatable = true, precision = 22, scale = 0)

	public Long getCodConexao() {
		return this.codConexao;
	}
}

Segue o erro ocorrido:

2008-05-14 17:26:01,031 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl main] mark transaction for rollback
javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.persistencia.pojo.Conexao
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:219)
	at com.persistencia.dao.generico.DAOGenerico.inserirGenerico(DAOGenerico.java:29)
	at com.persistencia.dao.ConexaoDAO.inserirConexao(ConexaoDAO.java:37)
	at com.servico.ServicoConexao.inserirConexao(ServicoConexao.java:81)
	at com.teste.TesteConexao.testeInserir(TesteConexao.java:27)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at junit.framework.TestCase.runTest(TestCase.java:168)
	at junit.framework.TestCase.runBare(TestCase.java:134)
	at junit.framework.TestResult$1.protect(TestResult.java:110)
	at junit.framework.TestResult.runProtected(TestResult.java:128)
	at junit.framework.TestResult.run(TestResult.java:113)
	at junit.framework.TestCase.run(TestCase.java:124)
	at junit.framework.TestSuite.runTest(TestSuite.java:232)
	at junit.framework.TestSuite.run(TestSuite.java:227)
	at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:76)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.persistencia.pojo.Conexao2008-05-14 17:26:01,046 DEBUG [org.hibernate.transaction.JDBCTransaction main] rollback

	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
	at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:213)
	... 23 more
2008-05-14 17:26:01,046 DEBUG [org.hibernate.transaction.JDBCTransaction main] re-enabling autocommit

Galera aguarado uma resposta.

Att

vcsmetallica

1 Resposta

V

Galera,

Com muito suor acho que resolvi esse problema, fiz assim:

@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="COD_CONEXAO")
	@SequenceGenerator(name="COD_CONEXAO", sequenceName="SQ_CONEXAO")
	@Column(name = "COD_CONEXAO", unique = true, nullable = false, insertable = true, updatable = true, precision = 22, scale = 0)
	public Long getCodConexao() {
		return this.codConexao;
	}

Eu coloquei o nome do SequenceGenerator o nome do campo que vai ser usado.
Bom estava apanhando desse problema, não sei se estava comendo mosca, mas funcionou.

Criado 14 de maio de 2008
Ultima resposta 15 de mai. de 2008
Respostas 1
Participantes 1