JSF + JPA + POSTGRES - Não insere id serial.

18/08/2018

8

Olá,

estou quebrando a cabeça com um erro, não consigo inserir dados em uma tabela postgres, utilizando o id como serial. Estou utilizando o EclipseLink JPA 2.1. Ja tentei de varias maneiras mas não consigo fazer funcionar.
Segue a minha Entity e o método para inserir.
Alguém tem alguma dica?

Entity:
@SequenceGenerator(name="usuario_seq", sequenceName = "Usuario_id_seq", allocationSize = 1, initialValue = 1)
@Table(name = "Usuario")
@NamedQueries({
@NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u")})
public class Usuario implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "usuario_seq")
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 100)
@Column(name = "nome")
private String nome;
..... GETTERS AND SETTERS

Metodo:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPASequencePU");
EntityManager em = emf.createEntityManager();

Usuario user = new Usuario();
user.setNome("Vinicius");
user.setSobrenome("Medeiros");
try {
em.getTransaction().begin();
em.merge(user);
em.getTransaction().commit();
} catch (Exception e) {
System.out.println("Erro " + e.getMessage());
}
Responder

Posts

24/08/2018

Marcio Souza

Olá Vinicius,
eu não uso PostgreSQL no dia a dia, só usei na faculdade por um tempo. Pelo que me lembro ele por padrão trabalha com Sequencia e para auto-incremento de chaves se usa a opção Serial. Sendo assim, na JPA o auto-incremento deve ser usado com IDENTITY na anotação do Id e não Sequence.

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false) // não precisa disso
@Column(name = "id") // não precisa disso se o id tem o mesmo nome da coluna na tabela
private Integer id;
Responder
Opa Ballem,

cheguei a testar com Identity, mesmo erro.
Este código que colei ai, é que foi gerado pela engenharia reversa, nem me detive nas anotações que foram feitas, com exceção do GeneratedValue.
Mas na verdade, olhando no outro dia com mais calma, vi que devo ter me passado em algum outro ponto, acredito que alguma coisa no meu arquivo de persistência.

Eu estava implementando via eclipselink. Mas larguei de mão, fui pro Hibernate. Estou com ele todo funcional ja, um CRUD pronto, utilizando um GenericDAO e tudo.

De qualquer forma agradeço o sua resposta.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar