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.
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