Andere soorten verzoeken

Beschikbaar

6.1 Benoemde zoekopdrachten

Met Hibernate kunt u query's niet rechtstreeks in de code opslaan. In plaats daarvan stelt hij voor query's namen te geven en ze apart op te slaan als annotaties. Nou, neem dan het gewenste verzoek direct bij de naam. Voorbeeld:

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

Annotaties kunnen vóór elke Entity-klasse worden toegevoegd: querynamen zijn niet gebonden aan een Entity.

U kunt ook verschillende parameters aan de query (query) toevoegen:

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

Het gebruik van dergelijke verzoeken is heel eenvoudig - hiervoor moet u een methode gebruiken createNamedQueryin plaats van een methode createQuery:

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

6.2 NativeQuery

En een ander eenvoudig maar erg handig ding is NativeQuery .

Als u geen HQL wilt gebruiken, maar Hibernate wilt gebruiken voor het in kaart brengen van entiteiten, kunt u query's schrijven in goede oude SQL. Niemand beperkt je.

Om dit te doen, hoeft u alleen maar de methode aan te roepen createNativeQuery()in plaats van createQuery().

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

U hoeft alleen maar te schrijven createNativeQueryen alles werkt zoals voorheen. Deze methode retourneert een object van het type NativeQuery , dat alle methoden ondersteunt die door de Query- klasse worden ondersteund . Er verandert niets voor jou.

Bovendien kan Native SQL Query ook worden opgeslagen als Named Queries .

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

En natuurlijk is hier de code om ermee te werken:

NativeQuery<Employee> query = session.createNamedQuery("Employee_GetAll", Employee.class);
List<Employee> resultLIst = query.list();
Opmerkingen
  • Populair
  • Nieuw
  • Oud
Je moet ingelogd zijn om opmerkingen te kunnen maken
Deze pagina heeft nog geen opmerkingen