Klasse DBEntityManager

java.lang.Object
de.svws_nrw.db.DBEntityManager
Alle implementierten Schnittstellen:
AutoCloseable

public final class DBEntityManager extends Object implements AutoCloseable
Die Klasse DBEntityManager regelt den Datenbankzugriff im SVWS-Servers durch die interne Nutzung eines EntityManager aus der Jakarta Persistence API (JPA). Dafür werden zahlreiche Methoden zur Verfügung gestellt.
  • Felddetails

    • use_db_caching

      public static final boolean use_db_caching
      Gibt an, ob das Caching der SVWS-Server-Datenbankdaten beim Zugriff auf die Datenbank genutzt werden soll. Dies ist als false vorkonfiguriert, da dies zu Problemen führt, wenn mehrere Prozesse auf die Datenbank zugreifen dürfen. Dies ist gerade durch den Parallelbetrieb von Schild3 zum SVWS-Server aber der Normalfall, so dass das Aktivieren dieser Option gefährlich ist und vermutlich zu Datenverlusten führt.
      Siehe auch:
  • Methodendetails

    • getUser

      public Benutzer getUser()
      Gibt den Benutzer zurück, der mit dieser Datenbank-Verbindung assoziiert ist.
      Gibt zurück:
      der Datenbank-Benutzer.
    • isPrivilegedDatabaseUser

      public boolean isPrivilegedDatabaseUser()
      Prüft, ob der Benutzer dieser Datenbank-Verbindung einen Benutzernamen hat, welcher dem priviligierten Datenbbank-Benutzer gehört, der in der SVWS-Konfiguration eingetragen ist.
      Gibt zurück:
      true, falls es sich um den priviligierten Datenbank-Benutzer handelt.
    • close

      public void close()
      Angegeben von:
      close in Schnittstelle AutoCloseable
    • isConnected

      public boolean isConnected()
      Prüft, ob eine Verbindung zur Datenbank besteht oder nicht, indem die Existenz des internen EntityManager geprüft wird.
      Gibt zurück:
      true, falls eine Verbindung besteht und ansonsten false.
    • useDBLogin

      public boolean useDBLogin()
      Gibt an, ob die Konfiguration vorsieht, dass der SVWS-Benutzername und das Kennwort der Konfiguration auch für die Datenbankverbindung verwendet werden.
      Gibt zurück:
      true, falls der SVWS-Benutzername und das Kennwort der Konfiguration auch für die Datenbankverbindung verwendet werden
    • getDBDriver

      public DBDriver getDBDriver()
      Gibt den für die Datenbankverbindung verwendeten DBDriver zurück.
      Gibt zurück:
      der für die Datenbankverbindung verwendete DBDriver
    • getDBSchema

      public String getDBSchema()
      Gibt das für die Datenbankverbindung verwendeten Schema der Datenbank zurück.
      Gibt zurück:
      das für die Datenbankverbindung verwendeten Schema der Datenbank
    • getDBLocation

      public String getDBLocation()
      Gibt den Ort zurück, an dem die Datenbank der genutzten Datenbankverbindung liegt. Dies ist entweder der Host-Teil mit Port einer URL oder ein Dateiname, wenn es sich um eine lokal gespeicherte Datenbank wie SQLite oder Access MDB handelt.
      Gibt zurück:
      der Ort, an dem die Datenbank der genutzten Datenbankverbindung liegt.
    • lock

      public void lock()
      Nimmt den Lock für DBEntityManager für den aktuellen Thread in Besitz und kehrt zurück, sofern dieser nicht im Besitz eines anderen Threads ist (siehe ReentrantLock.lock()).
    • unlock

      public void unlock()
      Gibt den Lock für DBEntityManager wieder frei, sofern dieser Thread im Besitz des Locks ist (siehe ReentrantLock.isLocked() und ReentrantLock.unlock())
    • hasActiveTransaction

      public boolean hasActiveTransaction()
      Prüft, ob eine Transaktion aktive ist
      Gibt zurück:
      true, falls eine Transaktion aktiv ist.
    • transactionBegin

      public void transactionBegin()
      Beginnt eine neue Transaction.
    • transactionFlush

      public void transactionFlush()
      Synchronisiert den Persistence-Kontext mit der Datenbank. Bei Transaktionen kann dies genutzt werden, um eine Reihenfolge der Befehle zu garantieren und damit Foreign-Key-Constraints einzuhalten.
    • transactionCommit

      public boolean transactionCommit()
      Beendet eine aktuelle Transaction mithilfe eines Commit.
      Gibt zurück:
      true, falls der Commit erfolgreich war und ansonsten false
    • transactionCommitOrThrow

      public void transactionCommitOrThrow()
      Beendet eine aktuelle Transaction mithilfe eines Commit.
      Löst aus:
      jakarta.persistence.RollbackException - wenn ein Fehler beim Commit auftritt
      IllegalStateException - wenn keine Transaktion aktiv ist
    • transactionRollback

      public boolean transactionRollback()
      Beendet eine aktuelle Transaction mithilfe eines Rollback.
      Gibt zurück:
      true, falls der Rollback erfolgreich war und ansonsten false
    • transactionRollbackOrThrow

      public void transactionRollbackOrThrow()
      Beendet eine aktuelle Transaction mithilfe eines Rollback.
      Löst aus:
      jakarta.persistence.PersistenceException - wenn ein Fehler beim Rollback auftritt
    • transactionExecuteUpdate

      public int transactionExecuteUpdate(String query)
      Führt eine Update-Anfrage auf der Datenbank aus. Die zugehörige Transaktion darum muss manuell gehandhabt werden.
      Parameter:
      query - die JPQL-Anfrage
      Gibt zurück:
      die Anzahl der aktualisierten Entities oder Integer.MIN_VALUE im Fehlerfall
    • transactionExecuteDelete

      public int transactionExecuteDelete(String query)
      Führt eine Delete-Anfrage auf der Datenbank aus. Die zugehörige Transaktion darum muss manuell gehandhabt werden.
      Parameter:
      query - die JPQL-Anfrage
      Gibt zurück:
      die Anzahl der gelöschten Entities oder Integer.MIN_VALUE im Fehlerfall
    • transactionNativeUpdate

      public int transactionNativeUpdate(String sqlQuery)
      Führt eine Update-Anfrage auf der Datenbank aus. Die zugehörige Transaktion darum muss manuell gehandhabt werden.
      Parameter:
      sqlQuery - der SQL-Befehl
      Gibt zurück:
      die Anzahl der aktualisierten Entities oder Integer.MIN_VALUE im Fehlerfall
    • transactionNativeUpdateAndFlush

      public int transactionNativeUpdateAndFlush(String sqlQuery)
      Führt eine Update-Anfrage auf der Datenbank aus. Die zugehörige Transaktion darum muss manuell gehandhabt werden. Im Anschluss an die Update-Anfrage wird ein Flush ausgeführt.
      Parameter:
      sqlQuery - der SQL-Befehl
      Gibt zurück:
      die Anzahl der aktualisierten Entities oder Integer.MIN_VALUE im Fehlerfall
    • transactionNativeDelete

      public int transactionNativeDelete(String sqlQuery)
      Führt eine Delete-Anfrage auf der Datenbank aus. Die zugehörige Transaktion darum muss manuell gehandhabt werden.
      Parameter:
      sqlQuery - der SQL-Befehl
      Gibt zurück:
      die Anzahl der gelöschten Entities oder Integer.MIN_VALUE im Fehlerfall
    • transactionNativeDeleteAndFlush

      public int transactionNativeDeleteAndFlush(String sqlQuery)
      Führt eine Delete-Anfrage auf der Datenbank aus. Die zugehörige Transaktion darum muss manuell gehandhabt werden. Im Anschluss an die Update-Anfrage wird ein Flush ausgeführt.
      Parameter:
      sqlQuery - der SQL-Befehl
      Gibt zurück:
      die Anzahl der gelöschten Entities oder Integer.MIN_VALUE im Fehlerfall
    • transactionPersist

      public boolean transactionPersist(Object entity)
      Persistiert die übergebene Entity in der Datenbank. Die zugehörige Transaktion darum muss manuell gehandhabt werden.
      Parameter:
      entity - die zu persistierende Entity
      Gibt zurück:
      true, falls die Entity erfolgreich persistiert wurde und ansonsten false
    • transactionPersistAll

      public boolean transactionPersistAll(Collection<? extends Object> entities)
      Persistiert die übergebenen Entities in der Datenbank. Die zugehörige Transaktion darum muss manuell gehandhabt werden.
      Parameter:
      entities - die zu persistierenden Entities
      Gibt zurück:
      true, falls die Entities erfolgreich persistiert wurden und ansonsten false
    • transactionRemove

      public boolean transactionRemove(Object entity)
      Entfernt die übergebene Entity aus der Datenbank. Die zugehörige Transaktion darum muss manuell gehandhabt werden.
      Parameter:
      entity - die zu entfernende Entity
      Gibt zurück:
      true, falls die Entity erfolgreich entfernt wurde und ansonsten false
    • transactionRemoveAll

      public boolean transactionRemoveAll(Collection<? extends Object> entities)
      Entfernt die übergebenen Entities aus der Datenbank. Die zugehörige Transaktion darum muss manuell gehandhabt werden.
      Parameter:
      entities - die zu entfernenden Entities
      Gibt zurück:
      true, falls die Entities erfolgreich entfernt wurden und ansonsten false
    • transactionReplace

      public boolean transactionReplace(Object oldEntity, Object newEntity)
      Tauscht eine Entity gegen eine andere Entity in der Datenbank aus. Die zugehörige Transaktion darum muss manuell gehandhabt werden.
      Parameter:
      oldEntity - die für den Tausch zu entfernende Entity
      newEntity - die neue Entity des Tauschs
      Gibt zurück:
      true, falls der Tausch erfolgreich durchgeführt wurde
    • transactionExecuteWithJDBCConnection

      public int transactionExecuteWithJDBCConnection(String query)
      Führt den SQL-Befehl direkt auf der JDBC-Connection (siehe Connection) aus. Die zugehörige Transaktion darum muss manuell gehandhabt werden.
      Parameter:
      query - der SQL-Befehl
      Gibt zurück:
      die Anzahl der aktualisierten Entities, 0 falls der Befehl keine Rückgabe hat oder Integer.MIN_VALUE im Fehlerfall
    • persistAll

      public boolean persistAll(Collection<? extends Object> entities)
      Persistiert die übergebenen Entities in der Datenbank. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      entities - die zu persistierenden Entities
      Gibt zurück:
      true, falls die Entities erfolgreich persistiert wurde und ansonsten false
    • persistRange

      public boolean persistRange(List<? extends Object> entities, int indexFirst, int indexLast)
      Persistiert die Entities aus dem angegebenen Bereich der übergebenen Liste in der Datenbank. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      entities - die zu persistierenden Entities
      indexFirst - der Index der ersten zu persistierenden Entity
      indexLast - der Index der letzten zu persistierenden Entity
      Gibt zurück:
      true, falls die Entities erfolgreich persistiert wurde und ansonsten false
    • persist

      public boolean persist(Object entity)
      Persistiert die übergebene Entity in der Datenbank. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      entity - die zu persistierende Entity
      Gibt zurück:
      true, falls die Entity erfolgreich persistiert wurde und ansonsten false
    • remove

      public boolean remove(Object entity)
      Entfernt die übergebene Entity aus der Datenbank. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      entity - die zu entfernende Entity
      Gibt zurück:
      true, falls die Entity erfolgreich entfernt wurde und ansonsten false
    • replace

      public boolean replace(Object oldEntity, Object newEntity)
      Tauscht eine Entity gegen eine andere Entity in der Datenbank aus. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      oldEntity - die für den Tausch zu entfernende Entity
      newEntity - die neue Entity des Tauschs
      Gibt zurück:
      true, falls der Tausch erfolgreich durchgeführt wurde
    • executeDelete

      public int executeDelete(String query)
      Führt eine JPQL-Lösch-Anfrage durch. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      query - die JPQL-Anfrage
      Gibt zurück:
      die Anzahl der gelöschten Entities oder Integer.MIN_VALUE im Fehlerfall
    • executeUpdate

      public int executeUpdate(String query)
      Führt eine JPQL-Aktualisierungs-Anfrage durch. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      query - die JPQL-Anfrage
      Gibt zurück:
      die Anzahl der aktualisierten Entities oder Integer.MIN_VALUE im Fehlerfall
    • executeNativeDelete

      public int executeNativeDelete(String query)
      Führt eine SQL-Lösch-Anfrage durch. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      query - die SQL-Anfrage
      Gibt zurück:
      die Anzahl der gelöschten Entities oder Integer.MIN_VALUE im Fehlerfall
    • executeNativeUpdate

      public int executeNativeUpdate(String query)
      Führt eine SQL-Aktualisierungs-Anfrage durch. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      query - die SQL-Anfrage
      Gibt zurück:
      die Anzahl der aktualisierten Entities oder Integer.MIN_VALUE im Fehlerfall
    • executeWithJDBCConnection

      public int executeWithJDBCConnection(String query)
      Führt den SQL-Befehl direkt auf der JDBC-Connection (siehe Connection) aus. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      query - der SQL-Befehl
      Gibt zurück:
      die Anzahl der aktualisierten Entities, 0 falls der Befehl keine Rückgabe hat oder Integer.MIN_VALUE im Fehlerfall
    • executeBatchWithJDBCConnection

      public int executeBatchWithJDBCConnection(List<String> queries) throws DBException
      Führt die übergebenen SQL-Befehle direkt auf der JDBC-Connection (siehe Connection) aus. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      queries - die Liste der SQL-Befehle
      Gibt zurück:
      die Anzahl der aktualisierten Entities, 0 falls die Befehle keine Rückgabe haben
      Löst aus:
      DBException - im Fehlerfall
    • query

      public List<Object[]> query(String sql)
      Führt eine SQL-Abfrage aus und gibt das Ergebnis als eine Liste von Objekt-Arrays zurück. Dabei entspricht jedes Objekt-Array einem Datensatz der Abfrage.
      Parameter:
      sql - der SQL-Befehl
      Gibt zurück:
      das Abfrage-Ergebnis als Objekt-Array
    • insertRangeNative

      public boolean insertRangeNative(String tablename, List<String> colnames, List<Object[]> entities, int indexFirst, int indexLast)
      Diese Methode fügt die Entities aus dem angegebenen Bereich der übergebenen Liste in die angebene Tabelle mit den übergebenen Spalten ein. Die entsprechende SQL-INSERT-Anfrage wird aus den übergebenen Daten generiert und im Rahmen einer Transaktion ausgeführt. Dies Ausführung erfolgt über ein PreparedStatement mit Batch-Processing auf der JDBC-Connection (siehe Connection), die aus dem intern verwendeten EntityManager ausgelesen wird.
      Parameter:
      tablename - der Name der Tabelle, in die eingefügt wird
      colnames - die Liste mit den Spaltennamen, die zu der Reihenfolge der Object-Array-Elementen der Entitäten passen muss
      entities - die Liste mit den einzelnen Datensätzen in Form von Object-Arrays
      indexFirst - der Index des ersten Datensatzes aus der Entitätenliste, der geschrieben wird
      indexLast - der Index des letzten Datensatzes aus der Entitätenliste, der geschrieben wird
      Gibt zurück:
      true, falls die SQL-Anfrage erfolgreich ausgeführt wurde und ansonsten false
    • internalExecuteNativeUpdateConnectionUnprepared

      protected int internalExecuteNativeUpdateConnectionUnprepared(String query)
      Führt eine SQL-Aktualisierungs-Anfrage durch. Die zugehörige Transaktion wird durch diese Methode gehandhabt.
      Parameter:
      query - die SQL-Anfrage
      Gibt zurück:
      die Anzahl der aktualisierten Entities oder Integer.MIN_VALUE im Fehlerfall
    • insertRangeNativeUnprepared

      public boolean insertRangeNativeUnprepared(String tablename, List<String> colnames, List<Object[]> entities, int indexFirst, int indexLast, int maxSQLStrLen)
      Diese Methode fügt die Entities aus dem angegebenen Bereich der übergebenen Liste in die angebene Tabelle mit den übergebenen Spalten ein. Die entsprechende native SQL-INSERT-Anfrage wird aus den übergebenen Daten generiert und im Rahmen einer Transaktion ausgeführt.
      Parameter:
      tablename - der Name der Tabelle, in die eingefügt wird
      colnames - die Liste mit den Spaltennamen, die zu der Reihenfolge der Object-Array-Elementen der Entitäten passen muss
      entities - die Liste mit den einzelnen Datensätzen in Form von Object-Arrays
      indexFirst - der Index des ersten Datensatzes aus der Entitätenliste, der geschrieben wird
      indexLast - der Index des letzten Datensatzes aus der Entitätenliste, der geschrieben wird
      maxSQLStrLen - die maximal erlaubte Länge für den SQL-String, der Versuch zu schreiben schlägt fehlt, wenn die Länge überschritte wird. (-1 um die Prüfung zu deaktivieren)
      Gibt zurück:
      true, falls die SQL-Anfrage erfolgreich ausgeführt wurde und ansonsten false
    • query

      public <T> jakarta.persistence.TypedQuery<T> query(String query, Class<T> cl)
      Erzeugt eine TypedQuery gemäß der Methode EntityManager.createQuery(String, Class)
      Typparameter:
      T - die Klasse des Ergebnistyps
      Parameter:
      query - der JPQL-String der Anfrage
      cl - das Klassen-Objekt für den Ergenistyp
      Gibt zurück:
      die Anfrage als TypedQuery
    • queryList

      public <T> List<T> queryList(String query, Class<T> cl, Object... params)
      Erzeugt eine TypedQuery gemäß der Methode EntityManager.createQuery(String, Class), setzt die übergebenen Parameter der Query in der angegebenen Reihenfolge und gibt das Ergebnis als eine Liste von DB-DTOs des angegebenen Typs zurück.
      Typparameter:
      T - die DTO-Klasse
      Parameter:
      query - der JPQL-String der Anfrage
      cl - das Klassenobjekt der DTO-Klasse
      params - die Parameter der JPQL-Anfrage
      Gibt zurück:
      die Liste mit DTO-Objekten
    • queryNative

      public <T> List<T> queryNative(String query, Class<T> cl)
      Führt eine Native SQL-Abfrage auf die Datenbank aus und gibt das Ergebnis als List von DTO-Objekten des Typs T zurück.
      Typparameter:
      T - die DTO-Klasse
      Parameter:
      query - die SQL-Abfrage
      cl - das Klassenobjekt der DTO-Klasse
      Gibt zurück:
      die Liste mit DTO-Objekten
    • queryNative

      public <T> List<T> queryNative(String query)
      Führt eine Native SQL-Abfrage auf die Datenbank aus und gibt das Ergebnis als List von DTO-Objekten des Typs T zurück.
      Typparameter:
      T - die DTO-Klasse
      Parameter:
      query - die SQL-Abfrage
      Gibt zurück:
      die Liste mit DTO-Objekten
    • queryNative

      public <T> List<T> queryNative(String query, String resultSetMapping)
      Führt eine Native SQL-Abfrage auf die Datenbank aus und gibt das Ergebnis als List von DTO-Objekten des Typs T zurück.
      Typparameter:
      T - die DTO-Klasse
      Parameter:
      query - die SQL-Abfrage
      resultSetMapping - der Name SQL-Result-Set-Mappings (SqlResultSetMapping)
      Gibt zurück:
      die Liste mit DTO-Objekten
    • queryNamed

      public <T> jakarta.persistence.TypedQuery<T> queryNamed(String name, Class<T> cl)
      Erzeugt eine TypedQuery gemäß der Methode EntityManager.createNamedQuery(String, Class)
      Typparameter:
      T - die Klasse des Ergebnistyps
      Parameter:
      name - der Name der JPQL-Anfrage
      cl - das Klassen-Objekt für den Ergenistyp
      Gibt zurück:
      die Anfrage als TypedQuery
    • queryAll

      public <T> List<T> queryAll(Class<T> cl)
      Stellt eine Datenbank-Anfrage für alle Datensätze vom angegebenen DTO-Typ und gibt eine Liste dieser Daten zurück.
      Typparameter:
      T - die DTO-Klasse
      Parameter:
      cl - das Klassen-Objekt für die DTO-Klasse
      Gibt zurück:
      die Liste mit den einzelnen Datensätzen
    • migrationQueryAll

      public <T> List<T> migrationQueryAll(Class<T> cl)
      Stellt eine Datenbank-Anfrage für alle Datensätze vom angegebenen DTO-Typ und gibt eine Liste dieser Daten zurück.
      Typparameter:
      T - die DTO-Klasse
      Parameter:
      cl - das Klassen-Objekt für die DTO-Klasse
      Gibt zurück:
      die Liste mit den einzelnen Datensätzen
    • querySingle

      public <T> T querySingle(Class<T> cl)
      Stellt eine Datenbank-Anfrage für den ersten Datensatz vom angegebenen DTO-Typ und gibt diesen zurück. Sollte kein Datensatz vorhanden sein, so wird null zurückgegeben
      Typparameter:
      T - die DTO-Klasse
      Parameter:
      cl - das Klassen-Objekt für die DTO-Klasse
      Gibt zurück:
      der erste Datensatz oder null
    • queryByKey

      public <T> T queryByKey(Class<T> cl, Object... id)
      Stellt eine Datenbank-Anfrage für den Datensatz vom angegebenen DTO-Typ mit den übergebenen Werten des Primärschlüssels und gibt diesen Datensatz zurück. Sollte kein Datensatz vorhanden sein, so wird null zurückgegeben
      Typparameter:
      T - die DTO-Klasse
      Parameter:
      cl - das Klassen-Objekt für die DTO-Klasse
      id - die Werte des Primärschlüssels für den gesuchten Datensatz
      Gibt zurück:
      der erste Datensatz oder null
    • queryByKeyList

      public <T> List<T> queryByKeyList(Class<T> cl, Collection<?> ids)
      Stellt eine Datenbank-Anfrage für die Datensätze vom angegebenen DTO-Typ, welcher einen Primärschlüssel aus einem Attribut hat, mit den übergebenen Werten für den Primärschlüssels und gibt die Datensätze zurück. Sollte kein Datensatz vorhanden sein, so wird eine leere Liste zurückgegeben.
      Typparameter:
      T - die DTO-Klasse
      Parameter:
      cl - das Klassen-Objekt für die DTO-Klasse
      ids - die Werte des Primärschlüssels für die gesuchten Datensätze
      Gibt zurück:
      doe Liste mit den Datensätzen
    • transactionGetNextID

      public <T> long transactionGetNextID(Class<T> t)
      Bestimmt für die übergebene DTOKlasse die nächste verfügbare Datenbank-ID
      Typparameter:
      T - der Typ der DtoKlasse
      Parameter:
      t - die DtoKlasse
      Gibt zurück:
      die nächste verfügbare ID
    • transactionGetNextIDByTablename

      public long transactionGetNextIDByTablename(String tableName)
      Bestimmt für die übergebene DTOKlasse die nächste verfügbare Datenbank-ID
      Parameter:
      tableName - der Name der Tabelle mit Autoinkrement
      Gibt zurück:
      die nächste verfügbare ID
    • persistNewWithAutoInkrement

      public <T> boolean persistNewWithAutoInkrement(Class<T> t, LongFunction<T> idApplicator)
      Generische Methode zum Speichern von Daten
      Typparameter:
      T - erwarteter Rückgabetyp
      Parameter:
      t - Typ der zu speichernden Daten
      idApplicator - methode die die ID im Objekt übernimmt
      Gibt zurück:
      Rückgabetyp