hibernate
Criteria en projecties
Zoeken…
Lijst met behulp van Beperkingen
Ervan uitgaande dat we een TravelReview-tabel hebben met plaatsnamen als kolom 'titel'
Criteria criteria =
session.createCriteria(TravelReview.class);
List review =
criteria.add(Restrictions.eq("title", "Mumbai")).list();
System.out.println("Using equals: " + review);
We kunnen beperkingen aan de criteria toevoegen door ze als volgt te koppelen:
List reviews = session.createCriteria(TravelReview.class)
.add(Restrictions.eq("author", "John Jones"))
.add(Restrictions.between("date",fromDate,toDate))
.add(Restrictions.ne("title","New York")).list();
Projecties gebruiken
Als we slechts enkele kolommen willen ophalen, kunnen we de klasse Projections gebruiken om dit te doen. Met de volgende code wordt bijvoorbeeld de titelkolom opgehaald
// Selecting all title columns
List review = session.createCriteria(TravelReview.class)
.setProjection(Projections.property("title"))
.list();
// Getting row count
review = session.createCriteria(TravelReview.class)
.setProjection(Projections.rowCount())
.list();
// Fetching number of titles
review = session.createCriteria(TravelReview.class)
.setProjection(Projections.count("title"))
.list();
Gebruik filters
@Filter
wordt gebruikt als een WHERE
kamp, hier enkele voorbeelden
Student Entiteit
@Entity
@Table(name = "Student")
public class Student
{
/*...*/
@OneToMany
@Filter(name = "active", condition = "EXISTS(SELECT * FROM Study s WHERE state = true and s.id = study_id)")
Set<StudentStudy> studies;
/* getters and setters methods */
}
Studie-entiteit
@Entity
@Table(name = "Study")
@FilterDef(name = "active")
@Filter(name = "active", condition="state = true")
public class Study
{
/*...*/
@OneToMany
Set<StudentStudy> students;
@Field
boolean state;
/* getters and setters methods */
}
StudentStudy Entiteit
@Entity
@Table(name = "StudentStudy")
@Filter(name = "active", condition = "EXISTS(SELECT * FROM Study s WHERE state = true and s.id = study_id)")
public class StudentStudy
{
/*...*/
@ManytoOne
Student student;
@ManytoOne
Study study;
/* getters and setters methods */
}
Op deze manier wordt elke keer dat het "actieve" filter is ingeschakeld,
-Alle vragen die we doen aan de studententiteit zullen ALLE studenten retourneren met ALLEEN hun state = true
studies
- Elke vraag die we in de studie-entiteit doen, retourneert ALLE state = true
studies
-Alle vragen die we op de StudentStudy-entiteit doen, zullen ALLEEN die met een state = true
studierelatie retourneren
Houd er rekening mee dat study_id de naam is van het veld in de sql StudentStudy-tabel