wenn ich eine Zählungsabfrage mit Hibernate erstelle - Kriterien - füge alle möglichen Tabellen aus der Entitätsklasse als linker Join hinzu, was eine schlechte Leistung ist.Kriterien Fügen Sie alle Tabellen aus der Entitätsklasse hinzu, wenn sie nur einen Teil davon benötigt
Das Unternehmen:
@Entity
@Table(name = "employees")
Public Class Employees {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "lz_job_stat_id")
private Integer id;
@ManyToOne
@JoinColumn(name = "departments_id")
private Departments departments;
@ManyToOne
@JoinColumn(name = "managers_id")
private Managers managers;
}
Und die Kriterien:
public class EmployeeDao {
public List<EmpDao> findIt(){
.....
Criteria crit = createEntityCriteria().setFetchMode("departments", FetchMode.SELECT);
crit.add(Restrictions.eq("managers.deleted", false));
crit.setProjection(Projections.count("id"));
return crit.list();
}
}
Und das erzeugte SQL:
select count() as y0_
from employees this_
left outer join departments department3_
on this_.department_id=department3_.department_id
left outer join managers manager2_
on this_.manager_id=manager2_.manager_id
jetzt, wenn ich versuche, die crit.list - es hat eine linke erstellen Join für alle möglichen Tabellen.
wenn es nicht ein Join für alle von ihnen erstellen soll. Istnt Kriterien Smart genug, um zu wissen, dass ich diese Tabellen nicht brauche? nur die, die ich benutze die "WHERE CLAUSE"
gibt es eine Möglichkeit, explizit zu sagen, Kriterien "NICHT DIESE TABELLEN!" ohne SQL
Ruhezustand: /* Kriterien Abfrage */wählen count (*) wie y0_ von Mitarbeiter this_ linken äußeren Join Abteilungen department3_ auf this_.department_id = department3_.department_id LEFT OUTER JOIN \t Manager manager2_ auf this_.manager_id = manager2_.manager_id – 2Big2BeSmall
Warum gehen wir nicht die Beschränkung auf manager.deleted = false sehen? Sind Sie sicher, dass es sich um die Abfrage handelt, die von diesem Kriterium generiert wird? – Thierry
Es wurde auf der Kopierpaste verpasst. – 2Big2BeSmall