fabiomedeirosf 6 de fev. de 2011
Seguinte, faltou especificar qual sequence deverá ser chamada, tem uma anotaçao @Sequence<> e lá vc porá o nome da sequence a ser chamada no momento da persistencia.
Feito isto, em @GeneratedValue (strategy = GenerationType.SEQUENCE) tem o atributo name que deverá indicar a sequence em questão que vc nomeou na anotação acima.
Teste aí.
ramonrlp 6 de fev. de 2011
Fabio, seria assim?
@Entity
@SequenceGenerator ( name = "SG" )
public class Editora {
@Id
@Column ( insertable = false )
@GeneratedValue ( strategy = GenerationType . SEQUENCE , generator = "SG" )
private Long id ;
Se for dessa forma, testei e recebi o mesmo erro…
A sintaxe é essa mesmo!?
Alguma outra sugestão!
Vlw!
javanotucupi 7 de fev. de 2011
Segue como fiz, talvez te ajude:
@SequenceGenerator ( name = "SequenceParaTabela" , schema = esquemaDoBanco , sequenceName = "nomeDaSequenceNoBanco" , allocationSize = 1 )
.
.
.
@GeneratedValue ( strategy = GenerationType . SEQUENCE , generator = "SequenceParaTabela" )
É só alterar esquemaDoBanco e nomeDaSequenceNoBanco
ramonrlp 7 de fev. de 2011
Seria assim mesmo?
@Entity
@SequenceGenerator ( name = "SequenceParaTabela" , schema = "public" , sequenceName = "hibernate_sequence" , allocationSize = 1 )
public class Editora {
@Id
@Column ( insertable = false )
@GeneratedValue ( strategy = GenerationType . SEQUENCE , generator = "SequenceParaTabela" )
private Long id ;
.
.
.
Se for assim, também deu erro… o mesmo erro.
Pra testar, deixei a anotação dessa forma, gerei novamente a tabela e tentei inserir os dados novamente, mas sem sucesso… de toda forma, valeu a atenção…
jean.zunino 7 de fev. de 2011
Boa noite,
Vamos ver…
Sua tabela no banco é Editora?
Tente colocar o nome da tabela.
@Entity
@Table(name = "editora")
e também altere
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, unique = true)
private Long id;
No banco coloque id como tipo serial.
Vlw
Lagaffe 7 de fev. de 2011
insertable=false? É isso mesmo?
samuelfac 5 de jul. de 2011
revivendo o tópico.
estou com o mesmo problema, ja fiz tudo acima, e continua o problema.
Ja alterei o nome da sequence, ja deixei a padrao, ja apaguei a tabela e a sequence, e foi gerado novamente automaticamente.
“E agora, quem poderá me ajudar??”
samuelfac 5 de jul. de 2011
o banco é criado através do hibernate.
meu ID esta assim:
@Id
@SequenceGenerator ( name = "FATURACLARO_ID" , sequenceName = "id_faturaclaro" , allocationSize = 1 )
@GeneratedValue ( strategy = GenerationType . SEQUENCE , generator = "FATURACLARO_ID" )
private Integer id ;
o sequence é gerado no banco, mas na hora de salvar ocorre o problema.
método para salvar:
Session em = HibernateSessionFactory .getSession () ;
Transaction trans = null ;
try {
trans = em .beginTransaction () ;
for ( FaturaClaroDetalhe o : faturaClaroDetalheList ) {
o .setId ( null ) ;
em .merge ( o ) ;
}
trans .commit () ;
} catch ( Exception e ) {
if ( trans .isActive ()) {
trans .rollback () ;
}
throw e ;
} finally {
em .close () ;
}
quando tenta executar o primeiro “em.merge(o);” ocorre o erro.
samuelfac 5 de jul. de 2011
mesmo proplema…
segue o LOG:
ERROR [ STDERR ] org . hibernate . exception . GenericJDBCException : could not get next sequence value
at org . hibernate . exception . SQLStateConverter . handledNonSpecificException ( SQLStateConverter . java : 103 )
at org . hibernate . exception . SQLStateConverter . convert ( SQLStateConverter . java : 91 )
at org . hibernate . exception . JDBCExceptionHelper . convert ( JDBCExceptionHelper . java : 43 )
at org . hibernate . id . SequenceGenerator . generate ( SequenceGenerator . java : 96 )
at org . hibernate . id . SequenceHiLoGenerator . generate ( SequenceHiLoGenerator . java : 53 )
at org . hibernate . event . def . AbstractSaveEventListener . saveWithGeneratedId ( AbstractSaveEventListener . java : 99 )
at org . hibernate . event . def . DefaultPersistEventListener . entityIsTransient ( DefaultPersistEventListener . java : 131 )
at org . hibernate . event . def . DefaultPersistEventListener . onPersist ( DefaultPersistEventListener . java : 87 )
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 )
Lucas_Emanuel 5 de jul. de 2011
Para de usar Sequence e usa Geration Type como Identity. Verifique se o campo ID está como serial.
samuelfac 5 de jul. de 2011
@Lucas Emanuel… fiz o que voce disse…
apaguei minhas tabelas, para gerar tudo novamente, pra nao ter perigo de ser algo no banco.
Tudo foi gerado.
Mas o problema agora é outro:
Segue o LOG:
org . hibernate . exception . GenericJDBCException : could not insert : [ br . sistema . entity . FaturaClaroDetalhe ]
at org . hibernate . exception . SQLStateConverter . handledNonSpecificException ( SQLStateConverter . java : 103 )
at org . hibernate . exception . SQLStateConverter . convert ( SQLStateConverter . java : 91 )
at org . hibernate . exception . JDBCExceptionHelper . convert ( JDBCExceptionHelper . java : 43 )
at org . hibernate . id . insert . AbstractReturningDelegate . performInsert ( AbstractReturningDelegate . java : 40 )
at org . hibernate . persister . entity . AbstractEntityPersister . insert ( AbstractEntityPersister . java : 2158 )
at org . hibernate . persister . entity . AbstractEntityPersister . insert ( AbstractEntityPersister . java : 2638 )
at org . hibernate . action . EntityIdentityInsertAction . execute ( EntityIdentityInsertAction . java : 48 )
at org . hibernate . engine . ActionQueue . execute ( ActionQueue . java : 250 )
at org . hibernate . event . def . AbstractSaveEventListener . performSaveOrReplicate ( AbstractSaveEventListener . java : 298 )
at org . hibernate . event . def . AbstractSaveEventListener . performSave ( AbstractSaveEventListener . java : 181 )
at org . hibernate . event . def . AbstractSaveEventListener . saveWithGeneratedId ( AbstractSaveEventListener . java : 107 )
at org . hibernate . event . def . DefaultPersistEventListener . entityIsTransient ( DefaultPersistEventListener . java : 131 )
at org . hibernate . event . def . DefaultPersistEventListener . onPersist ( DefaultPersistEventListener . java : 87 )
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 )
procurei algo aqui no forum, alguns dizem que era problema no banco, mas o banco foi gerado pelo persistence.
o que pode ser??
samuelfac 6 de jul. de 2011
Tambem tentei com GenerationType.AUTO
mas voltou a ocorrer o erro:
org . hibernate . exception . GenericJDBCException : could not get next sequence value
at org . hibernate . exception . SQLStateConverter . handledNonSpecificException ( SQLStateConverter . java : 103 )
at org . hibernate . exception . SQLStateConverter . convert ( SQLStateConverter . java : 91 )
at org . hibernate . exception . JDBCExceptionHelper . convert ( JDBCExceptionHelper . java : 43 )
at org . hibernate . id . SequenceGenerator . generate ( SequenceGenerator . java : 96 )
at org . hibernate . event . def . AbstractSaveEventListener . saveWithGeneratedId ( AbstractSaveEventListener . java : 99 )
at org . hibernate . event . def . DefaultPersistEventListener . entityIsTransient ( DefaultPersistEventListener . java : 131 )
at org . hibernate . event . def . DefaultPersistEventListener . onPersist ( DefaultPersistEventListener . java : 87 )
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 )
*novamente apaguei as tabelas e a sequence do banco e foi gerado automaticamente.
samuelfac 9 de jul. de 2011
putz, achei o problema!!!
antes de executar o SAVE, eu fazia um FIND no banco, mas o parametro que eu estava passando era diferente do campo no banco.
Entao o SQL dava erro (mas nao sei o pq nao estourava erro) e ao tentar salvar ele pegava a mesma transação e nao conseguia executar por ter ocorrido um erro anterior.
Obrigado a todos que tentaram me ajudar!!!
samuelfac 9 de jul. de 2011
bobboyms 8 de out. de 2011
leandrognaf 27 de fev. de 2012
yorgan:
Duas coisas.
Primeiro, você cria a base através do persistence.xml com a propriedade ‘hibernate.hbm2ddl.auto’ ou utilizando um comando SQL?
Se for via SQL, você cria uma sequence para esse campo?
Segundo, as anotações devem ficar assim:
@Id
@SequenceGenerator ( name = "USUARIO_ID_GENERATOR" , sequenceName = "USUARIO_ID_SEQ" , allocationSize = 1 )
@GeneratedValue ( strategy = GenerationType . SEQUENCE , generator = "USUARIO_ID_GENERATOR" )
private Integer id ;
Lembre-se, o atributo sequenceName utiliza uma sequence criada no banco, portanto a mesma precisa estar lá para ser utilizada.
[]'s
Daniel
Vc e meu Heroi,
xD
utilizei essas anotações ai para persisti no oracle e consegui \o/