Super Entidade com Sequence do PostgreSQL

Olá amigos, tenho uma classe “Entidade” onde esse cara possui alguns metodos e algumas propriedades, ID e DATA de criação são algumas delas e todas as minhas entidades a herda.

Fiz a herança com hibernate tudo tranquilo. Mas… me deparei que o ID que esta nela e cada entidade abaixo herda vem com a mesma sequence la de cima. Então ficaria meio estranho, tipo, imagina, eu inserindo um cliente ( id 1 ) e um endereco ( que será id “2” kkk, deveria ser 1 tbem ja q é o primeiro hehe ).

Alguem ja passou por isso? Terei de colocar o ID com sua propria sequence em cada cara?

[quote=darksteel3000]Olá amigos, tenho uma classe “Entidade” onde esse cara possui alguns metodos e algumas propriedades, ID e DATA de criação são algumas delas e todas as minhas entidades a herda.

Fiz a herança com hibernate tudo tranquilo. Mas… me deparei que o ID que esta nela e cada entidade abaixo herda vem com a mesma sequence la de cima. Então ficaria meio estranho, tipo, imagina, eu inserindo um cliente ( id 1 ) e um endereco ( que será id “2” kkk, deveria ser 1 tbem ja q é o primeiro hehe ).

Alguem ja passou por isso? Terei de colocar o ID com sua propria sequence em cada cara?[/quote]

E ae darksteel3000, cria sequences para cada entidade. Aí no momento do insert, faz algo assim:

  public Pessoa insert(Pessoa  entity)
  {
    entity.getId().setCodigo(/*aqui o seu código que pega as sequences do banco*/);
    return this.repository.insert(entity);
  }

Se você está usando sequence do JPA, o ID realmente deve ficar na super classe.

Nunca vi esse tipo de opção que vc quer para o hibernate não.

Pq vai ficar estranho deixar na super classe, pq a sequence deverá estar la.

E dai, vai ficar gerando ID 1 pro usuario e ao salvar o endereço, gera o ID 2 ao inves de 1 tambem, por causa da sequence.

entity.getId().setCodigo( getSequence(Sequences.SEQ_NOME_SEQUENCIA) );

onde SEQ_NOME_SEQUENCIA é uma constante com os nomes de suas sequencias, e getSequence método genérico que busca a sequencia no banco

:?

você deve anotar sua classe na qual esta sendo pai de todas as outras com “MappedSuperClass”;

exemplo:


import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

@MappedSuperclass
public class EntidadeAbstrata 
{

	/**
	 * id referente a todas entidade persistentes
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

/** continuação da classe*/ 

Ja está desta forma, o pro é como vou fazer o lance da Anotação para SequenceGeneration tendesse? Se eu colocar ela em cima deste atributo ID, só será gerada uma sequence para todas as entidades abaixo e não uma para cada entidade.

dessa forma não, o Hibernate/JPA , cria um “sequence” para cara entidade que estende a entidade superior;

coloca parte do seu código para que agente consiga ver.

:smiley:

Exemplo de uma classe extendida:


@Entity
@Table(name = "entidades")
public class Entidade extends EntidadeAbstrata
{
  private static final long serialVersionUID = 1L;

  
  /**
   * Código auxiliar 
   */
  @Column(name = "cod_auxiliar", unique = true, nullable = false, length = 6)
  private String codAuxiliar;

//.... repare que a  classe não possui id pois ja está na classe pai