Andere Arten von Anfragen

Verfügbar

6.1 Benannte Abfragen

Im Ruhezustand können Sie Abfragen nicht direkt im Code speichern. Stattdessen schlägt er vor, Abfragen Namen zu geben und sie separat als Anmerkungen zu speichern. Dann nehmen Sie die gewünschte Anfrage direkt beim Namen auf. Beispiel:

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

Anmerkungen können vor jeder Entitätsklasse hinzugefügt werden: Abfragenamen sind nicht an eine Entität gebunden.

Sie können der Abfrage (Abfrage) auch verschiedene Parameter hinzufügen:

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

Die Verwendung solcher Anfragen ist sehr einfach – dazu müssen Sie eine Methode createNamedQueryanstelle einer Methode verwenden createQuery:

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

6.2 NativeQuery

Und eine weitere einfache, aber sehr nützliche Sache ist NativeQuery .

Wenn Sie HQL nicht verwenden möchten, aber Hibernate für die Entitätszuordnung verwenden möchten, können Sie Abfragen in gutem alten SQL schreiben. Niemand schränkt dich ein.

Dazu müssen Sie lediglich die Methode createNativeQuery()anstelle von aufrufen createQuery().

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

Sie schreiben einfach createNativeQueryund alles wird wie zuvor funktionieren. Diese Methode gibt ein Objekt vom Typ NativeQuery zurück , das alle Methoden unterstützt, die die Query- Klasse unterstützt . Für Sie wird sich nichts ändern.

Darüber hinaus können native SQL-Abfragen auch als benannte Abfragen gespeichert werden .

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

Und hier ist natürlich der Code für die Arbeit mit ihnen:

NativeQuery<Employee> query = session.createNamedQuery("Employee_GetAll", Employee.class);
List<Employee> resultLIst = query.list();
Kommentare
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Auf dieser Seite gibt es noch keine Kommentare