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 createNamedQuery
anziché 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 createNativeQuery
e 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();
GO TO FULL VERSION