JSF + JPA + POSTGRES - Não insere id serial.
18/08/2018
0
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());
}
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());
}
Vinicius Medeiros
Curtir tópico
+ 0
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.
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
25/08/2018
Vinicius Medeiros
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.
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
Clique aqui para fazer login e interagir na Comunidade :)