Как сделать соединение с критериями гибернации в классе тезисов? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть класс с отношением многие-к-одному с абстрактным классом (PosicaoContabil).

@Entity
@Table(name = "CONT_POSICAO_DIARIA")
public class PosicaoDiaria extends BaseEntity<Long> {
    private static final long serialVersionUID = 1L;

    @Id
    @SequenceGenerator(name = "SEQ_POSICAO_DIARIA", sequenceName = "SEQ_POSICAO_DIARIA", 
     allocationSize = 1, initialValue = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_POSICAO_DIARIA")
    @Column(name = "ID_POSICAO_DIARIA")
    private Long id;

    @NotNull
    @ManyToOne
    @JoinColumn(name = "ID_POSICAO_CONTABIL", nullable = false)
    private PosicaoContabil posicaoContabil;

    ...

И мне нужно сделать соединение с одной из реализаций этого абстрактного класса, но получить доступ к атрибутам абстрактного класса (например: "id")

Реализация абстрактного класса

@Entity
@Table(name = "CONT_POSICAO_CARTEIRA")
public class PosicaoCarteira extends PosicaoContabil {
    private static final long serialVersionUID = 1L;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(name = "IND_TIPO_CARTEIRA", nullable = false, length = 20)
    private TipoCarteira tipoCarteira;

    @Enumerated(EnumType.STRING)
    @Column(name = "IND_FINALIDADE", length = 30)
    private TipoFinalidade tipoFinalidade;
    ....

Мой абстрактный класс

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class PosicaoContabil extends BaseEntity<Long> {

    private static final long serialVersionUID = 1L;

    @Id
    @SequenceGenerator(name = "SEQ_POSICAO_CARTEIRA", sequenceName = "SEQ_POSICAO_CARTEIRA", allocationSize = 1, initialValue = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_POSICAO_CARTEIRA")
    @Column(name = "ID_POSICAO_CONTABIL")
    private Long id;

    @NotNull
    @ManyToOne
    @JoinColumns({ @JoinColumn(name = "COD_TITULO", referencedColumnName = "COD_TITULO", nullable = false),
            @JoinColumn(name = "DAT_VENCIMENTO_TITULO", referencedColumnName = "DAT_VENCIMENTO", nullable = false) })
    private TituloVencimento tituloVencimento;
   ....

Мой код, использующий критерии объединения:

    Root<PosicaoDiaria> root = query.from(PosicaoDiaria.class); 
    Join<PosicaoDiaria,PosicaoCarteira>joinPosicaoDiariaPosicaoCarteira=root.join("id");

И этот код приводит к ошибке: BasicPathUsageException: Не удается присоединиться атрибуту basi c тип

Пожалуйста, предложения?

...