TOP N join using JPA

61 Views Asked by At

Syntax:

List contains a 'Equipamento'; 'Equipamento' contains:

  • List seguros,
  • List ipos,
  • List tacografos,
  • List DLs,
  • List lavagens;

I need to limit the joins, for example: " select top (5) * from lavagens "

Any other ideas?

Entity Registo

Class Registo 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Integer id;

    @ManyToOne(fetch = FetchType.EAGER, optional = false)
    @JoinColumn(name = "Num_Equipamento")
    private Equipamento equipamento;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "Registo_ID")
    private List<Seguro> seguros;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "Registo_ID")
    private List<IPO> ipos;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "Registo_ID")
    private List<Tacografo> tacografos;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "Registo_ID")
    private List<DL> DLs;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "Registo_ID")
    private List<Lavagem> lavagens;

(...)
// gets/sets
Class RegistoDAO

public List<Registo> listarTodosParam(){
(...)
TypedQuery<Registo> query = em.createQuery("SELECT DISTINCT reg from Registo reg " + 
                " LEFT JOIN reg.equipamento equi " + 
                " LEFT JOIN reg.seguros seg " + 
                " LEFT JOIN reg.ipos ipo " + 
                " LEFT JOIN reg.tacografos tac " + 
                " LEFT JOIN reg.DLs dl " + 
                " LEFT JOIN reg.lavagens lav ", Registo.class);
(...)
}



0

There are 0 best solutions below