6.1 Navngitte søk
Hibernate lar deg ikke lagre spørringer direkte i koden. I stedet foreslår han å gi forespørsler navn og lagre dem separat som merknader. Vel, så ta ønsket forespørsel direkte ved navnet. Eksempel:
@org.hibernate.annotations.NamedQueries({
@org.hibernate.annotations.NamedQuery(name = "Employee_FindById",
query = "from Employee where id = :id"),
@org.hibernate.annotations.NamedQuery(name = "Employee_FindAllEmployes",
query = "from Employee"),
@org.hibernate.annotations.NamedQuery(name = "Employee_UpdateEmployeeName",
query = "Update Employee set name = :newName where id = :id"),
...
})
Merknader kan legges til før enhver Entity-klasse: spørringsnavn er ikke knyttet til noen Entity.
Du kan også legge til ulike parametere i spørringen (spørringen):
@org.hibernate.annotations.NamedQuery(
name = "Employee_ FindAllEmployes",
query = "from Employee",
timeout = 1,
fetchSize = 10,
cacheable = true,
cacheMode = "GET"
)
Å bruke slike forespørsler er veldig enkelt - for dette må du bruke en metode createNamedQuery
i stedet for en metode createQuery
:
Query<Employee> query = session.createNamedQuery("Employee_FindAllEmployes", Employee.class);
List<Employee> resultLIst = query.list();
6.2 NativeQuery
Og en annen enkel, men veldig nyttig ting er NativeQuery .
Hvis du ikke vil bruke HQL, men vil bruke Hibernate for enhetskartlegging, så kan du skrive spørringer i gode gamle SQL. Ingen begrenser deg.
For å gjøre dette trenger du bare å ringe metoden createNativeQuery()
i stedet for createQuery()
.
NativeQuery<Employee> query = session.createNativeQuery("select * from employee", Employee.class);
List<Employee> resultLIst = query.list();
Du bare skriver createNativeQuery
og alt vil fungere som før. Denne metoden returnerer et objekt av typen NativeQuery , som støtter alle metodene som Query- klassen støtter . Ingenting vil endre seg for deg.
I tillegg kan Native SQL Query også lagres som navngitte spørringer .
@org.hibernate.annotations.NamedNativeQueries(
@org.hibernate.annotations.NamedNativeQuery(name = "Employee_GetAll",
query = "select * from employee",
resultClass = Employee.class)
)
Og selvfølgelig, her er koden for å jobbe med dem:
NativeQuery<Employee> query = session.createNamedQuery("Employee_GetAll", Employee.class);
List<Employee> resultLIst = query.list();