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 createNamedQueryi 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 createNativeQueryog 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();