Hibernate - SequenceGenerator e EmbeddedId

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?

Classe da tabela Principal:
@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!

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.

Oi,

Alguém tem algum ideia?

Abraços!

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.

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.

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.