CodeGym /Corsi /All lectures for IT purposes /Altri tipi di richieste

Altri tipi di richieste

All lectures for IT purposes
Livello 1, Lezione 215
Disponibile

6.1 Query nominative

Hibernate ti consente di non memorizzare le query direttamente nel codice. Invece, suggerisce di assegnare nomi alle query e di memorizzarli separatamente come annotazioni. Bene, allora prendi la richiesta desiderata direttamente dal suo nome. Esempio:

@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"),
...
})

Le annotazioni possono essere aggiunte prima di qualsiasi classe di entità: i nomi delle query non sono legati a nessuna entità.

Puoi anche aggiungere vari parametri alla query (query):

@org.hibernate.annotations.NamedQuery(
  name = "Employee_ FindAllEmployes",
  query = "from Employee",
  timeout = 1,
  fetchSize = 10,
  cacheable = true,
  cacheMode = "GET"
)

L'utilizzo di tali richieste è molto semplice: per questo è necessario utilizzare un metodo createNamedQueryanziché un metodo createQuery:


Query<Employee> query = session.createNamedQuery("Employee_FindAllEmployes", Employee.class);
List<Employee> resultLIst = query.list();

6.2 Query nativa

E un'altra cosa semplice ma molto utile è NativeQuery .

Se non si desidera utilizzare HQL, ma si desidera utilizzare Hibernate per la mappatura delle entità, è possibile scrivere query nel buon vecchio SQL. Nessuno ti limita.

Per fare ciò, devi solo chiamare il metodo createNativeQuery(), invece di createQuery().


NativeQuery<Employee> query = session.createNativeQuery("select * from employee", Employee.class);
List<Employee> resultLIst = query.list();

Basta scrivere createNativeQuerye tutto funzionerà come prima. Questo metodo restituisce un oggetto di tipo NativeQuery , che supporta tutti i metodi supportati dalla classe Query . Nulla cambierà per te.

Inoltre, Native SQL Query può essere archiviata anche come Named Query .


@org.hibernate.annotations.NamedNativeQueries(
    @org.hibernate.annotations.NamedNativeQuery(name = "Employee_GetAll",
  	query = "select * from employee",
  	resultClass = Employee.class)
)

E, naturalmente, ecco il codice per lavorare con loro:


NativeQuery<Employee> query = session.createNamedQuery("Employee_GetAll", Employee.class);
List<Employee> resultLIst = query.list();

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION