Customizing
Version 27 Version 26 39.5.25 39.5.23 39.5.22 39.5.21 39.5.20 39.5.19 39.5.18 39.5.17 German English
Version 27 Version 26 39.5.25 39.5.23 39.5.22 39.5.21 39.5.20 39.5.19 39.5.18 39.5.17 German English

HqlInterface

HQL

Allgemeines

Informationen

  • HQL (Hibernate Query Language) ist eine Abfragesprache, mit der man Klassen und Objekte direkt ansprechen kann, ohne deren Namen in der Datenbank kennen zu müssen (z.B. "project.pr_id" anstatt "DI001001 FROM DT461").

  • Abfragen werden intern in SQL-Statements übersetzt und ausgeführt.

  • HQL-Namen können aus dem Data Dictionary, den Entity-Namen (für Tabellen) bzw. DI-Python-IDs (für Spalten) ausgelesen werden.

Hinweise

  • Über HQL werden lediglich SQL-Abfragen direkt an die Datenbank abgesetzt. Weitergehende Funktionalitäten von PLANTA project, wie z.B. abhängiges Speichern oder Löschen, ist dadurch nicht möglich.

  • Wird z.B. ein Projekt über HQL gelöscht, werden die untergeordneten Projektstrukturen nicht automatisch mitgelöscht.

  • Generell verwendet PLANTA project derzeit die Hibernate-Version 4.3.4 mit den darin enthaltenen Funktionalitäten inkl. HQL: http://hibernate.org/orm/documentation/4.3.

Modul HQL

Information

  • Um HQL verwenden zu können, muss zuerst das hql-Modul importiert werden.

Beispiel (classic)

from hql import hql

or (preferred)

import hql

Methoden

Information

  • Für HQL stehen drei Funktionen zur Verfügung.

search_record

Details

  • Diese Methode gibt eine Liste von DTP Records zurück.

hql.search_record(String hql, Dictionary parameters)

Beispiel

pars = { 'pr_id' : '4811' }
project = hql.search_record("from Project project where project.pr_id = :pr_id", pars)

query

Details

  • Diese Methode gibt eine Liste von Daten (in Listenform) zurück, entsprechend db_select().

hql.query(String hql, Dictionary parameters)

Beispiel

pars = { 'pr_id' : '4811' }
project_data = hql.query("select project.pr_id, project.project_name from Project project where project.pr_id = :pr_id", pars)

modify

Details

  • Mit dieser Methode können Update- bzw. Delete-Statements durchgeführt werden. Zurückgegeben wird die Anzahl der Änderungen in der DB, entsprechend db_modify().

hql.modify(String hql, Dictionary parameters)

Beispiel Update:

pars = { 'pr_id' : '4811', 'pr_name' : 'new_name' }
hqlString="update Project project set project.project_name = :pr_name where project.pr_id = :pr_id"
hql.modify(hqlString, pars)

Beispiel Delete:

pars = { 'mod_id' : module.id.get_value() }
hql.modify("delete Module m where m.id_ = :mod_id", pars)

Hinweise

  • Properties werden in HQL nur über Python-IDs identifiziert.

  • Namen wie "id","class", "enum", "const" sind von Hibernate und Java reserviert. Auf alle Python-IDs, die diese Namen verwenden, kann man in HQL mit Python-ID und Unterstrich zugreifen, z.B. ("id_").

  • Anstatt Tabellennamen werden die Namen der Entitäten verwendet.

Dokumentation zu HQL

Informationen

  • In HQL verwendet man anstatt dem Tabellenamen den Entitätsnamen und anstatt dem Spaltennamen den Property-Namen.

    • Den Entitätsnamen kann man im Data Dictionary (Feld Entity-Name) nachlesen. Falls er nicht eingetragen ist, dann ist der Entitätsname DTxxx.

    • Die Entitäten sind in PLANTA project momentan noch nicht über Associations miteinander verknüpft. Dies bedeutet, dass Joints zwischen diesen nicht genutzt werden können.

  • Der Property-Name entspricht dem der DI-Python-ID. Falls diese nicht eingetragen ist, dann ist der Property-Name "DIxxxxx".

  • parameters sind optionale Dictionaries, mit denen Parameter des HQL-Statements übergeben werden können. Siehe hierzu Bindevariablen in Statements.

Beispiel

pars = { 'pr_id' : '4811' }
project = hql.search_record("from Project p where p.pr_id = :pr_id", pars)
  • In HQL sollen die UUIDs als Strings übergeben werden.

Beispiel

import hql
from ppms import ppms

project_record = ppms.search_record(461, ['4811'], ['uuid'])
uuid = project_record.uuid.get_value()

pars = { 'pr_uuid' : uuid }

query = "SELECT project.project_name from Project project where project.id = :pr_uuid"
result = hql.query(query, pars)
 
ppms.ui_message_box(result) # [['Schleppkettenanlage']]

Hinweis

Vorteile von hql.search_record und ppms.search_record

ppms.search_record()


searchRecord.png

  • Geht nur auf die Datenbank, falls der Record nicht vollständig existiert.

hql.search_record()


hqlsearch.png

  • Suche auf mehr als einem Record.

  • Suche nicht auf den Primärschlüssel beschränkt, sondern kann alles, was auch in einer HQL where-Klausel möglich ist.