Persistência usando TABLE_PER_CLASS com tables @id distintas

Fala Devs beleza, seguinte estou usando o TABLE_PER_CLASS para criar duas tabelas utilizando como herança os campos iguais,certo consegui fazer isso, mais deparei com um problema em outras tabelas onde o tipo da PK é diferente, e com isso da erro:

Error Msg = ORA-01790 : a expressão deve ter o mesmo tipo de dados da expressão correspondente

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class PlanningPublication  {

    @NotNull
    @Column(name = "NUM_ANO")
    private Integer year;

}
@Entity
@Table(name = "A15_PLANEJ_PUBL")
public class PlanningPublicationClassic extends PlanningPublication {

    @Id
    @NotNull
    @Column(name = "NUM_MANU")
    private String  manual;                   // esse é var no bd

    @Column(name = "NUM_DIA")
    private Integer day;

}
@Entity
@Table(name = "EPR_BAS_PLANEJ_PUBL")
public class PlanningPublicationProgram extends PlanningPublication {

    @Id
    @NotNull
    @Column(name = "NUM_MANU")
    private Integer  manual;     // esse é number no bd

    @Column(name = "DAT_PLANEJ", columnDefinition = "DATETIME")
    private LocalDateTime plannerDate;

}

Dessa forma que postei não funciona pois o PlanningPublication precisa de uma @id e não tem como eu unificar pois são tipos diferentes, se fosse igual funciona. Se eu colocar um tipo so por exemplo String ele mostra a msn inicial.

Desde já agradeço!

Fala Maycon, blz!

Seguinte… Quando esse tipo de mapeamento por herança acontece, um UNION no banco de dados é executado. E esse UNION só será bem sucedido se os campos forem do mesmo tipo. Por isso ocorre o erro ORA-01790. O ideal é que neste mapeamento apenas a classe abstrata defina o @Id, para que você não replique em outras subclasses. No conceito de herança você deve herdar baseado no conceito “é um”, ou seja, se há diferença então nesse cenário não seria um. E como relatado acima a boa prática dessa abordagem é o @Id ser declarado na super classe. Mas existem outras maneiras de fazer esse mapeamento. Isso vai depender do que exatamente você quer fazer, recomendo a página abaixo:

Abraço e bons estudos.

1 curtida

Fala Israel!! Tranquilo.

Ótimo, irei verificar uma outra abordagem talvez outra se encaixe nesse cenário e no problema , como é legado e por vários fatores internos irei analisar uma solução para esse problema, não sei se a melhor, então posto aqui.

Abraço e Obrigado!!!

1 curtida