Problemas com campo serial do Postgresql e JPA + Hibernate

3 respostas
A

Olá galera do guj,
estou precisando de uma ajuda com um problema que é o seguinte
quando salvo um objeto no banco (postgresql 9.xx) através do JPA utilizando o Hibernate 4 como privader ele salva o objeto mas o campo serial não impelemnta
o incremente e nem utiliza a sequence criada pelo postgres alguem podem me ajudar com isso

ja utilizei varias impelementações atualmente o meu código esta assim

@Entity
@SequenceGenerator(name="seq_table_campo", sequenceName="seq_table_campo") 
@Table(name="TABELA")
public class Tabela{
     @Id
     @GeneratedValue(generator="seq_table_campo", strategy=GenerationType.SEQUENCE)
     private Integer id;

   .....
}

o código acima dispara uma exception informando que a sequence informada não esta relacionada no banco
ai implementei assim

@Entity
@SequenceGenerator(name="seq_table_campo", sequenceName="seq_table_campo") 
@Table(name="TABELA")
public class Tabela{
     @Id
    @Column
     private Integer id;

   .....
}

só que nesse caso as sequences não são acionadas.

alguem pode me ajudar?

só para informar utilizo anotations

3 Respostas

apferreira

Fala ae, Aquila!
Veja se funciona assim:

@Entity  
@Table(name="TABELA")  
public class Tabela{  
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
     private Integer id;  
  
   .....  
}
craniac
Eu uso assim:
@Entity
@Table(name="usuarios")
public class Usuario {

    @SequenceGenerator(name = "usuarios", sequenceName = "usuarios_seq",allocationSize=1)  
    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "usuarios")
    @Column(name="id_usuario")
    private long id;
A

Boa noite,
bom implementei sob a sugestão do apferreira
o código ficou assim

@Entity
@SequenceGenerator(name = "RUNNER_ID_SEQ", sequenceName = "RUNNER_ID_RUNNER_SEQ", allocationSize = 1, initialValue = 1)
@Table(name = "runner", schema = "championship")
public class Runner implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
//	@GeneratedValue(generator = "RUNNER_ID_SEQ")
	@GeneratedValue(strategy = GenerationType.IDENTITY)  
	@Column(name = "id_runner", insertable = false, columnDefinition = "serial")
	private Integer idRunner;

e isso aparentemente resolveu muito obrigado

vale lembrar que meu postgresql é 9.xx a versão mais recente a razão eu não mas é necessário manter o nome da sequence ao retirar da erro porque ele procura por uma sequence padrão do hibernate,
também foi necessário colocar as sequences no formato __SEQ por alguma razão que eu desconheço o hibernate não reconhece de outra forma ele diz que não encontra.

os campos “insertable=false” e o columnDefinition=“serial” é para que o postgres gere o serial e não o hibernate.

Criado 2 de julho de 2012
Ultima resposta 2 de jul. de 2012
Respostas 3
Participantes 3