Hibernate - SequenceGenerator e EmbeddedId

5 respostas
G

Olá,

Estou desenvolvendo um sistema num banco de dados já existente e estou com dificuldade de usar uma sequencia do banco dentro de um mapeamento Embeddable do Hibernate.

Sempre que tento inserir um novo registro o valor do idPessoa (PES_ID) fica zerado, ele não aciona a sequencia.

Alguém sabe como resolver este problema?

<strong>Classe da tabela Principal:</strong>

@Entity

@Table(name = “PES_PESSOA”)

public class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;

@EmbeddedId	
private PessoaPK id;

@Column(name = "PES_NOME")
private String nome;

@Column(name = "PES_LOGRADOURO")
private String logradouro;

@Column(name = "PES_BAIRRO")
private String bairro;	
....

}

Classe Embeddable com a Sequencia

@Embeddable
public class PessoaPK implements Serializable {

private static final long serialVersionUID = 1L;

@Column(name = "EMP_ID")
private long idEmpresa;

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenciaPessoa")
@SequenceGenerator(name = "sequenciaPessoa", sequenceName = "S_PES_PESSOA", allocationSize = 1)
@Column(name = "PES_ID")
private long idPessoa;
...

}

Grato!

5 Respostas

G

Oi,

Se colocar o ID dentro do “Embeddable” ocorre um erro no hibernate, e a chave é composta por isso estou utilizando o “EmbeddedId”.

Já tinha tentado colocar o “SequenceGenerator” encima do nome da classe, mas infelizmente nada muda.

Valeu pelas dicas, vamos ver se alguém já passou por essa necessidade antes.

G

Oi,

Alguém tem algum ideia?

Abraços!

P

Alguma coisa não faz muito sentido na tua lógica de negócio. Se o campo IdPessoa já é incremental (e único) esse campo deve ser a tua PK e não precisas de uma chave composta.

G

Oi,
Concordo com sua análise, mas como informei estamos trabalhando encima de um banco já existente de um outro sistema, logo precisamos seguir a lógica já adotada com duas chaves primárias, sendo uma delas uma sequencia.
Logo se souber como resolver e puder ajudar agradeço.

P

Não sei se o Hibernate suporta isso assim de maneira “fácil”.
De qualquer forma podes sempre fazer na mão e invocar o nextval da sequencia e fazer o set na PK antes de gravar.

Criado 27 de abril de 2016
Ultima resposta 6 de mai. de 2016
Respostas 5
Participantes 2