Classe (abstrata)
Classe1 e Classe2 extendem de Classe (não abstratas)
Classe3 extende de Classe2 (não abstrata)
Para mapear essas classes usei a estratégia JOINED em “Classe”:
@Inheritance(strategy = InheritanceType.JOINED)
Até agora estava funcionando bem para as regras do sistema. Mas surgiu uma nova necessidade, em que o objeto pode ser alterado de Classe2 para Classe3 ou vice-versa.
Não sei se há a possibilidade de tratar isso no mapeamento. Na hora de gravar o objeto que está mudando de classe, o banco reclama. Como não sou muito experiente com JPA, me surgiu esse problema.
Uma possível solução seria a de ter três tabelas:
Uma para Classe
Uma para Classe2 e Classe3 que contenham todos os atributos de Classe2 e Classe3 (semelhante a estratégia SINGLE_TABLE, mas só para juntar Classe2 e Classe3)
Uma para Classe1
Mas eu não consegui fazer isso. É possível? Ou será q existe algum outro artifício mantendo a estratégia JOINED e fazendo algum tratamento na hora de gravar o objeto?
tive o mesmo problema há um tempo, não achei solução, pelo que percebi , a busca sempre é feita da classe mãe para classe filha, então se sua classe 2 já existe e voce vai salva-la como classe 3, vai ser feito um update no lugar de um isert na classe3.
a solução que encontrei foi retirar herança, e fiz um mapeamento classe3 (0…*)----------------------(1)classe2.
Classe abstrata implementa a interface que define os metodos get e set Id;
@MappedSuperclass
public abstract class SciAbstractEntity implements xyzEntityId,
Serializable {
private Long id;
@Override
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}