Jpa + postgresql

6 respostas
panngo

Bom dia!
Galera é o seguinte… Estou utilizando JPA com Postgresql e os campos “auto incremento” não está populando o campo id

Tabela:

CREATE TABLE pessoa
(
  pes_codigo serial NOT NULL DEFAULT nextval('pessoa_pes_codigo_seq'::regclass),
  pes_nomcom character varying(100) NOT NULL,
  pes_nompes character varying(100),
  pes_dtacad date NOT NULL DEFAULT now(),
  pes_tipesp character varying(1) NOT NULL,
  CONSTRAINT pessoa_pkey PRIMARY KEY (pes_codigo)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE pessoa
  OWNER TO postgres;

Classe:

@Entity
@Table(catalog = "", schema = "public")
@XmlRootElement
@ManagedBean
@RequestScoped
public class Pessoa implements Serializable {
    
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "pes_codigo")
    private Integer pesCodigo;
    
    @Basic(optional = false)
    @Column(name = "pes_nomcom")
    @NotNull
    private String pesNomcom;
    
    @Column(name = "pes_nompes")
    private String pesNompes;
    
    @Column(name = "pes_dtacad")
    @Temporal(TemporalType.DATE)
    private Date pesDtacad;
    
    @Basic(optional = false)
    @Column(name = "pes_tipesp")
    @NotNull
    private String pesTipesp;

Já tentei mudar o “strategy” do GeneratedValue para SEQUENCE para gerar com base no nome da sequence mas gera erro

Exception Description: The sequence named [pessoa_pes_codigo_seq] is setup incorrectly.  Its increment does not match its pre-allocation size.
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:499)

Alguma idéia do que posso fazer?

6 Respostas

drsmachado

É por que PostgreSQL não tem auto_increment, mas, sequence, como o Oracle.
Você precisa corrigir o strategy do GeneratedValue e apontar qual a sequence responsável pelo incremento.

panngo

drsmachado:
É por que PostgreSQL não tem auto_increment, mas, sequence, como o Oracle.
Você precisa corrigir o strategy do GeneratedValue e apontar qual a sequence responsável pelo incremento.

Como eu havia dito no post, Já tentei mudar o “strategy” do GeneratedValue para SEQUENCE para gerar com base no nome da sequence mas gera erro

Exception Description: The sequence named [pessoa_pes_codigo_seq] is setup incorrectly.  Its increment does not match its pre-allocation size.  
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:499)
drsmachado

panngo:
drsmachado:
É por que PostgreSQL não tem auto_increment, mas, sequence, como o Oracle.
Você precisa corrigir o strategy do GeneratedValue e apontar qual a sequence responsável pelo incremento.

Como eu havia dito no post, Já tentei mudar o “strategy” do GeneratedValue para SEQUENCE para gerar com base no nome da sequence mas gera erro

Exception Description: The sequence named [pessoa_pes_codigo_seq] is setup incorrectly. Its increment does not match its pre-allocation size. at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:499)


E você não sabe ler a porcaria do erro e interpretá-lo?
Veja que a sequence que você criou está errada. Se você tem dificuldades com o inglês, coloque a mensagem no google translate e veja o que ela diz.
O problema não é o JPA, é você.

panngo

drsmachado:
panngo:
drsmachado:
É por que PostgreSQL não tem auto_increment, mas, sequence, como o Oracle.
Você precisa corrigir o strategy do GeneratedValue e apontar qual a sequence responsável pelo incremento.

Como eu havia dito no post, Já tentei mudar o “strategy” do GeneratedValue para SEQUENCE para gerar com base no nome da sequence mas gera erro

Exception Description: The sequence named [pessoa_pes_codigo_seq] is setup incorrectly. Its increment does not match its pre-allocation size. at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:499)


E você não sabe ler a porcaria do erro e interpretá-lo?
Veja que a sequence que você criou está errada. Se você tem dificuldades com o inglês, coloque a mensagem no google translate e veja o que ela diz.
O problema não é o JPA, é você.

Vixi, ja obtive mais respostas uteis que essa.por aqui.
Cara se nao quer ajudar, de boa nao comenta asneira. E sei como fazer funcionar tirando o default do campo e chando a seqiuece mas queria que funcionasse da maneira que esta.
Mesmo assim obigado por sua atençao e ficarei aguardando outra pessoa com una resposta melhor que a sua

men0r

Tive o mesmo problema com MySQL. Tive que reinstalar o MySQL e depois funcionou.

Fabiano_Abreu

Olá panngo,

Não sei se você já resolveu seu problema, então… Posso estar falando a maior asneira, pois, não conheço nada sobre desenvolvimento front-end, mas, a sequence pessoa_pes_codigo_seq não foi criada em um schema especifico?

Se por exemplo, você criou um schema novo, não esta usando o public e criou a sequence neste schema, no seu código aponte a chamada da sequence desta forma:

SEU_SCHEMA.pessoa_pes_codigo_seq

Se não for isso, por favor desconsidere minhas palavras.

Abraços.

_ _
Fabiano Abreu
Papo SQL

Criado 2 de agosto de 2013
Ultima resposta 2 de ago. de 2013
Respostas 6
Participantes 4