6.1 Namngivna frågor
Hibernate låter dig inte lagra frågor direkt i koden. Istället föreslår han att ge frågor namn och lagra dem separat som kommentarer. Tja, ta sedan den önskade förfrågan direkt med dess namn. Exempel:
@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"),
...
})
Anteckningar kan läggas till före alla Entitetsklasser: frågenamn är inte knutna till någon Entity.
Du kan också lägga till olika parametrar till frågan (fråga):
@org.hibernate.annotations.NamedQuery(
name = "Employee_ FindAllEmployes",
query = "from Employee",
timeout = 1,
fetchSize = 10,
cacheable = true,
cacheMode = "GET"
)
Att använda sådana förfrågningar är mycket enkelt - för detta måste du använda en metod createNamedQuery
istället för en metod createQuery
:
Query<Employee> query = session.createNamedQuery("Employee_FindAllEmployes", Employee.class);
List<Employee> resultLIst = query.list();
6.2 NativeQuery
Och en annan enkel men mycket användbar sak är NativeQuery .
Om du inte vill använda HQL, men vill använda Hibernate för entitetsmapping, kan du skriva frågor i gamla goda SQL. Ingen begränsar dig.
För att göra detta behöver du bara anropa metoden createNativeQuery()
istället för createQuery()
.
NativeQuery<Employee> query = session.createNativeQuery("select * from employee", Employee.class);
List<Employee> resultLIst = query.list();
Du bara skriver createNativeQuery
så fungerar allt som förut. Den här metoden returnerar ett objekt av typen NativeQuery , som stöder alla metoder som Query -klassen stöder . Ingenting kommer att förändras för dig.
Dessutom kan Native SQL Query också lagras som Named Queries .
@org.hibernate.annotations.NamedNativeQueries(
@org.hibernate.annotations.NamedNativeQuery(name = "Employee_GetAll",
query = "select * from employee",
resultClass = Employee.class)
)
Och naturligtvis, här är koden för att arbeta med dem:
NativeQuery<Employee> query = session.createNamedQuery("Employee_GetAll", Employee.class);
List<Employee> resultLIst = query.list();
GO TO FULL VERSION