CodeGym /Java kurs /All lectures for SV purposes /Andra typer av förfrågningar

Andra typer av förfrågningar

All lectures for SV purposes
Nivå , Lektion
Tillgängliga

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 createNamedQueryistä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 createNativeQueryså 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();

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