Selbstreferenz in Hibernate HSQL

peez

Bekanntes Mitglied
Ich will gerade was mit Hibernate probieren. In einer Mappingdatei habe ich folgende Zeile:

[XML]<property name="AnzahlFelder" formula="select count(konf.brkoId) from Konfiguration konf Where fremdId=HIERMUSSNESELBSTREFERENZHIN" type="java.lang.Integer" />[/XML]

Wie kann ich denn die referenz auf das Objekt selbst - also "this" im generierten Code bekommen? Geht das denn überhaupt?
 

peez

Bekanntes Mitglied
Ja aber ich will dass die Anzahl der Felder nur für das Objekt ausgegeben wird, auf das getAnzahlFelder() aufgerufen wird.

Also wenn man sich die resultierende Java Klasse vorstellt was in der art:

Java:
class Konfiguration {

  //.....

  public Integer getAnzahlFelder() {
    String sql = "SELECT count(*) AS menge FROM konfiguration WHERE fremdId=" + this.getId();
    //... Ausführen 
    Integer anzahl = rs.getInt("menge");
    return anzahl;
  }
}

dieses this.getId() müsste ich irgendwie abgebildet bekommen...
 

byte

Top Contributor
konf.id ist analog zu this.id, bezoge auf das SQL.

Verstehe nicht so genau, was Du überhaupt machen willst. Was ist fremdId? Ein Foreign Key in der Datenbank? Das kannst Du so per HQL gar nicht ansprechen. HQL bezieht sich immer nur auf die gemappte Klasse und nicht auf die Datenbanktabelle.
 

peez

Bekanntes Mitglied
Ja ist mir beim Schreiben auch aufgefallen, dass das schwer zu erklären ist ;-)

Also ich mach mal ein einfaches Szenario (Achtung: mit neuen Bezeichnungen etc.):

Ich habe in der Datenbank eine Tabelle mit "Briefings":
Code:
__Tabelle Briefings__
Briefing_ID (Primärschlüssel)
Briefing_name
Briefing_Beschreibung
...

Dann gibt es eine Tabelle, in der beliebig viele Felder dazu definiert werden:
Code:
__Tabelle Felder__
Feld_ID
Briefing_ID
Feld_Beschreibung
Feld_Typ
...

Jetzt möchte ich gerne zu jedem Briefing auslesen können, wieviele Felder dazu existieren.
Dazu habe ich versucht den o.g. HQL Part in das Hibernate mapping für Briefing einzufügen:

[XML]<property name="AnzahlFelder" formula="select count(feld.Feld_ID) from Feld feld Where BriefingId=<this.id>" type="java.lang.Integer" />[/XML]
Hier braucht ja briefingId die ID des konkreten Objekts, auf dem getAnzahlFelder() aufgerufen wird.
 
S

SlaterB

Gast
was gibt es da nicht zu verstehen?
wenn man im Mapping einer Hibernate-Klasse ein formula-Tag mit einer Query, ob SQL oder HQL, angeben kann,
dann muss die sich doch irgendwie auf das aktuelle Element beziehen, 'select count(*) from beliebigeTabelle' wäre eher langweilig

nach
Hibernate 3 Formulas - O'Reilly Media
sieht es so aus, als müsste man einfach id schreiben, sofern der eigene Primary-Key so definiert ist, alles ohne Tabellen-Kürzel scheint sich auf das eigene Objekt zu beziehen
 

peez

Bekanntes Mitglied
Genau so hab ichs gemeint.

Allerdings stehe ich jetzt vor dem nächsten Problem: Funktioniert das überhaupt grundsätzlich so mit dem formula attribut? Nachdem mein direktversuch nicht funktioniert hat, habe ich jetzt das hier versucht:

[XML]<property name="AnzahlFelder" formula="select 1" type="java.lang.Integer" />[/XML]

will leider nicht :-(
 
S

SlaterB

Gast
kann ich nicht sagen, ich würde auf jeden Fall immer erst Beispiele im Netz suchen, vielleicht ist irgendeine kleine Syntax zu beachten,

wie ich gerade sehe, gehts in dem Link von mir gar nicht um normale Properties, sondern um discriminator, später many-to-one,
aber es wird sich bei google sicher noch anderes finden lassen, falls es sowas überhaupt gibt
 

byte

Top Contributor
was gibt es da nicht zu verstehen?
wenn man im Mapping einer Hibernate-Klasse ein formula-Tag mit einer Query, ob SQL oder HQL, angeben kann,
dann muss die sich doch irgendwie auf das aktuelle Element beziehen, 'select count(*) from beliebigeTabelle' wäre eher langweilig

Ja, und das habe ich auch schon längst oben beantwortet.

from Konfiguration konz

dann ist konz das eigentliche Objekt und konz.id der Primary Key, also analog zu this.getId().
 
S

SlaterB

Gast
??
das erscheint mir ohne Sinn,
nach welchem System sollte das so funktionieren und was würde das leisten?

im Mapping einer Klasse Konfiguration würde
Code:
<property name="AnzahlFelder" formula="select count(*) from Konfiguration konf" type="java.lang.Integer" />
dann was sein? immer 1 da ja konf automatisch nur das eigene Objekt ist?

----

was ist wenn man andere Konf-Objekte zählen möchte, die z.B. mit dem eigenen Objekt per Zwischentabelle verbunden sind
Code:
<property name="AnzahlFelder" formula="select count(*) from Konfiguration konf, KonfToKonf ktk, Konfiguration konf2 
where konf.id = ktk.idHoeher and ktk.idTiefer =  konf2.id" type="java.lang.Integer" />
?
auch andersrum wäre es ein interessante Abfrage
Code:
<property name="AnzahlFelder" formula="select count(*) from Konfiguration konf, KonfToKonf ktk, Konfiguration konf2 
where konf2.id = ktk.idHoeher and ktk.idTiefer =  konf.id" type="java.lang.Integer" />

einmal wird abgefragt, wieviele andere Konfigurationen untergeordnet sind, das andere mal wie viele drüber stehen,
woran erkennt nun Hibernate, was 'das eigene Objekt' ist, konf oder konf2?
 
Zuletzt bearbeitet von einem Moderator:

byte

Top Contributor
OK, jetzt habe ich verstanden, was Du meinst. Da es sich in diesem Fall ja um SQL handelt und nicht um HQL, müsste <this.id> einfach der Column Name sein, der auch im Mapping definiert ist, also
Code:
Briefing_ID
(ohne Alias).

EDIT: Hm, scheint auch nicht zu funktionieren. Guck mal in die Hibernate Doku in Abschnitt 23.4, da sind einige Beispiele.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb Hibernate: Fremdschlüssel wird nicht erzeugt Datenbankprogrammierung 2
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
I Hibernate Predicate mit IN Clause "Unaware how to convert value to requested type" Datenbankprogrammierung 0
T org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ..., could not initialize proxy - no Session Datenbankprogrammierung 5
T Realisierungsvorschläge Hibernate SQL Datenbankprogrammierung 1
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Tabellen-Erzeugung via Hibernate ignoriert 'CascadeType' settings Datenbankprogrammierung 1
I Hibernate / JPA - Spaltenname von Query (Select) bekommen Datenbankprogrammierung 6
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
damike84 Hibernate: persistieren eines Graphen Datenbankprogrammierung 2
N Hibernate Entitäten bei Selects aus 2 Tabellen Datenbankprogrammierung 7
OnDemand Hibernate Realationen Datenbankprogrammierung 7
OnDemand Hibernate ManyToOne Datenbankprogrammierung 5
D Hibernate oneToMany Syntaxfehler Datenbankprogrammierung 3
D Hibernate Error: NoSuchMethodError Datenbankprogrammierung 4
D hibernate mit postgreSQL Datenbankprogrammierung 3
S MySQL Hibernate: Fehler bei Verwendung von 2 unterschiedlichen Enumration Datenbankprogrammierung 3
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
OnDemand MySQL Trigger löst nicht aus bei Hibernate Update Datenbankprogrammierung 12
OnDemand Hibernate OneToMany ManyToOne Datenbankprogrammierung 61
J Hibernate One-To-One mit Where Klausel Datenbankprogrammierung 6
L hibernate.cfg.xml Could not parse configuration Datenbankprogrammierung 0
L H2 Hibernate definieren? Datenbankprogrammierung 1
T JPA Mapping Enum (hibernate 5) Datenbankprogrammierung 1
H In hibernate.cfg.xml schreiben und auslesen Datenbankprogrammierung 0
K Hibernate: Ein Fluch Datenbankprogrammierung 3
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
K Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank Datenbankprogrammierung 5
S JpaRepositories & Hibernate: ungewolltes trim() in findBy Datenbankprogrammierung 7
S MySQL hibernate exception: illegal state exception : entityManagerFactory is closed Datenbankprogrammierung 5
S Hibernate: Verschiedene Klassen zurückgeben. Datenbankprogrammierung 2
looparda Architektur für JPA Hibernate Umstieg Datenbankprogrammierung 14
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
perlenfischer1984 Hibernate mit final members Datenbankprogrammierung 3
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
N SQLite Hibernate und Aufruf von Funktion SELECT last_insert_rowid() Datenbankprogrammierung 2
N Sqlite3 und Hibernate Datenbankprogrammierung 3
A Hibernate Cache leeren Datenbankprogrammierung 4
I MySQL Hibernate zu viele Queries Datenbankprogrammierung 2
Psypsy Hibernate / JPA erkennen von schon gespeicherten Objekten Datenbankprogrammierung 4
Psypsy Hibernate / JPA OneToOne MappedBy Frage Datenbankprogrammierung 2
J Hibernate + DTOs - DTOs in DAOs verwenden? Datenbankprogrammierung 1
S Hibernate-Konfiguration : Unverständliche Ausgabe beim Ausführen Datenbankprogrammierung 0
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
J Hibernate + HSQL embedded Datenbankprogrammierung 2
P Hibernate Einstieg Datenbankprogrammierung 5
C Hibernate und createQuery Datenbankprogrammierung 2
V kennt jemand empfehlenswerte online tutorials zur Hibernate ? gerne auch englisch. Datenbankprogrammierung 4
G H2 Hibernate - wie joins machen Datenbankprogrammierung 1
D Hibernate: Zustand eines Objekts erkennen? Datenbankprogrammierung 0
D Unterschiede Hibernate Vs. Java Persistence API Datenbankprogrammierung 8
I Hibernate / JPA Index hinzufügen Datenbankprogrammierung 1
X Hibernate Cache Verständnisproblem Datenbankprogrammierung 0
T Hibernate und inner class Datenbankprogrammierung 0
K n:m Tabellen mit Hibernate erstellen Datenbankprogrammierung 1
T Hibernate DAO gute Tutorials/Bücher gesucht Datenbankprogrammierung 0
C Hibernate: could not resolve property Datenbankprogrammierung 1
J Plug-In-Framework für Hibernate-Klassen Datenbankprogrammierung 0
M Hibernate - Save Child wenn nötig Datenbankprogrammierung 10
M DAO's + Hibernate Theorie Datenbankprogrammierung 4
T Hibernate, HSQLDB und UNIQUE Datenbankprogrammierung 2
F Hibernate - verschiedene Schemen Datenbankprogrammierung 7
D Hibernate SaveOrUpdate Exception Datenbankprogrammierung 2
D Hibernate CreateQuery ohne Result Datenbankprogrammierung 7
E MySQL Hibernate mit JaxWS führt zu LazyInitialization Exception Datenbankprogrammierung 8
L Einarbeitung in Hibernate -> wenn gute SQL Kenntnisse vorhanden? Datenbankprogrammierung 2
B DB2 Hibernate findet Datenbank nicht Datenbankprogrammierung 18
K JPA / Hibernate Annotations Datenbankprogrammierung 4
M JPA / Hibernate mit Postgres DB Datenbankprogrammierung 3
P JSF + H2 + TomEE + Hibernate/JPA Datenbank wird nicht angelegt Datenbankprogrammierung 3
E MySQL Hibernate ( Anfänger ) Datenbankprogrammierung 3
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
J Hibernate Select auf Parameterliste Datenbankprogrammierung 3
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
P Oracle Hibernate - Oracle-VarChar-Index wird nicht genutzt Datenbankprogrammierung 3
M Hibernate Foreign Key definieren Datenbankprogrammierung 4
M Abstrakte Klassen Hibernate Datenbankprogrammierung 4
D Mit Hibernate (mit Annotation) auf Views zugreifen Datenbankprogrammierung 2
M [Hibernate]Abgleich eines lokalen Objekts mit dem Zustand aus der Datenbank. Datenbankprogrammierung 3
P Mit Hibernate mehrere Datensätze löschen Datenbankprogrammierung 7
P Probleme mit meinem 1. Hibernate Beispiel Datenbankprogrammierung 3
P erste Schritte mit Hibernate Datenbankprogrammierung 3
V Hibernate Interfaces von anderem Projekt Datenbankprogrammierung 2
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
B Hibernate und portierbare Datenbank Datenbankprogrammierung 3
qwerqer [Hibernate] Mappingvarianten Datenbankprogrammierung 2
lumo Teneo Hibernate & JPA Datenbankprogrammierung 15
Z JPA mit Hibernate - Unable to build EntityManagerFactory Datenbankprogrammierung 7
Dit_ Hibernate, effiziente SQL-Abfrage definieren Datenbankprogrammierung 5
K Hibernate vs. JDBC Datenbankprogrammierung 4
J Hibernate Info 593 ? Datenbankprogrammierung 4
J Erstellen der SessionFactory in Hibernate 4.1 Datenbankprogrammierung 2
L PostgreSQL Hibernate-Frage Datenbankprogrammierung 2
X MySQL Hibernate: Massenupdate auf unbekannte Tabelle Datenbankprogrammierung 4
N hibernate: datasource Datenbankprogrammierung 7
H MySQL Hibernate: Updaten vereinfachen Datenbankprogrammierung 2
T Hibernate Division zweier Summen Datenbankprogrammierung 4
B MySQL Fehler: Cannot open connection mit Tomcat7, Hibernate und MySQL Datenbankprogrammierung 4
F GWT und Hibernate - gwt.dev.Compler not found Datenbankprogrammierung 3
M NestedTransaction- Exception in Hibernate Datenbankprogrammierung 15

Ähnliche Java Themen


Oben