పేజీలతో పని చేస్తోంది: LIMIT మరియు OFFSET

చాలా తరచుగా, డేటాబేస్ నుండి డేటా "పేజీలు"లో తిరిగి పొందబడుతుంది. ఎందుకంటే పెద్ద జాబితాలతో పని చేయడం ఎలా సౌకర్యవంతంగా ఉంటుంది. మేము మొదట 1 నుండి 20 వరకు, ఆపై 21 నుండి 40 వరకు వరుసలను ప్రశ్నిస్తాము.

SQL ఈ పరిమితి మరియు OFFSET కోసం ప్రత్యేక ఆపరేటర్‌లను కలిగి ఉన్నందున ఇది చాలా సాధారణ పరిస్థితి.

ఈ ఆపరేటర్ల అనలాగ్‌లు హైబర్నేట్‌లో కూడా ఉన్నాయి. వారు మాత్రమే వాటిని ప్రత్యేక పద్ధతుల రూపంలో తయారు చేయాలని వెంటనే నిర్ణయించుకున్నారు:

  • setFirstResult() OFFSET కి సారూప్యంగా ఉంటుంది .
  • setMaxResults() LIMITకి సారూప్యంగా ఉంటుంది .

ఈ పద్ధతులను ఉపయోగించి ప్రశ్నలను వ్రాయడం చాలా సులభం. 41 నుండి ప్రారంభమయ్యే 20 టాస్క్‌లను తిరిగి ఇవ్వమని అడిగే ప్రశ్నను వ్రాస్దాం. ఇది ఇలా కనిపిస్తుంది:

Query<EmployeeTask> query = session.createQuery( “from EmployeeTask, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();

ఫలితాలను క్రమబద్ధీకరించండి

ప్రశ్న యొక్క ఫలిత స్ట్రింగ్‌లలో కొంత భాగాన్ని ఎలా పొందాలో మేము కనుగొన్నాము. తదుపరి ముఖ్యమైన సమస్య క్రమబద్ధీకరణ.

హైబర్నేట్‌లో క్రమబద్ధీకరించడం నేరుగా HQL ప్రశ్నలో వ్రాయబడుతుంది మరియు సాధారణంగా ఊహించినట్లుగా కనిపిస్తుంది:

from Employee order by joinDate

మీరు క్రమబద్ధీకరణ క్రమాన్ని మార్చాలనుకుంటే, మీరు తెలిసిన పదాలను ఉపయోగించాలి: asc మరియు desc. ఉదాహరణ:

from Employee order by joinDate desc

SQLలో వలె, మీరు బహుళ ఫీల్డ్‌ల ద్వారా క్రమబద్ధీకరించవచ్చు:

from Employee order by joinDate desc, name asc

అదనంగా, క్రమబద్ధీకరణ ఫీల్డ్‌ను పారామీటర్‌గా పాస్ చేయవచ్చు:

String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(“username”, “Ivan Ivanovich”);
query.setParameter(“ord”, “name”);

List<EmployeeTask> resultLIst = query.list();

HQLలో విధులు

HQLలో SQLలో వలె, మీరు వివిధ ఫంక్షన్లను ఉపయోగించవచ్చు.

HQL మద్దతిచ్చే మొత్తం ఫంక్షన్‌ల జాబితా ఇక్కడ ఉంది :

మొత్తం విధులు వివరణ
గణన () అడ్డు వరుసల సంఖ్యను అందిస్తుంది
మొత్తం() విలువల మొత్తాన్ని గణిస్తుంది
నిమి() కనిష్ట విలువను అందిస్తుంది
గరిష్ట () గరిష్ట విలువను అందిస్తుంది
సగటు() సగటును అందిస్తుంది

మీరు ఆశాజనకంగా గుర్తుంచుకున్నట్లుగా, సమూహ విధులు సమూహంతో కలిపి ఉపయోగించబడతాయి. గ్రూప్ బై SQLలో మాదిరిగానే పని చేస్తుంది, కాబట్టి మేము పునరావృతం చేయము.

మరియు, వాస్తవానికి, సాధారణ విధులు . సాధారణ ఫంక్షన్లతో, ప్రతిదీ చాలా సులభం - అవి SQL సర్వర్ ద్వారా నిర్వహించబడతాయి, హైబర్నేట్ వాటిని ఉపయోగించి ప్రశ్నను సరిగ్గా రూపొందించడానికి మాత్రమే అవసరం.

కాబట్టి, SQL సర్వర్ మద్దతిచ్చే అన్ని లక్షణాలకు హైబర్నేట్ మద్దతు ఇస్తుంది. మరియు మీరు మీ SessionFactoryని కాన్ఫిగర్ చేసినప్పుడు SQL సర్వర్ రకం sqlDialect పరామితి ద్వారా సెట్ చేయబడుతుంది.

వినియోగదారుకు కేటాయించిన టాస్క్‌ల సంఖ్యను కనుగొనండి:

String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(“username”, “Ivan Ivanovich”);
Integer count = query.uniqueResult();