Hibernate - spezielle Frage, n zu n Beziehung

Status
Nicht offen für weitere Antworten.

sina.die

Mitglied
Hallo,

ich bin recht neu bei der Datenbankprogrammierung und Hibernate und versuche ein für mich schwieriges Problem zu lösen.

In meinem Datenmodell(richtiger Begriff? Ich meine die Java-Seite) habe ich eine n-n-Beziehung. In der Realität ist es jedoch so, dass hier eine 1-1 Beziehung besteht. In Zukunft soll das wohl an dem Modell geändert werden. Momentan steht das jedoch nicht in meiner Macht dies zu tun.

Nun möchte ich ein Objekt, von dem ich weiß, dass es sich als einziges in der Liste befindet, auf etwas prüfen, weiß aber nicht, wie ich das realisiere, da sich diese eine zusätzliche Abfrage in einer sehr langen DB-Anfrage befindet.
Eigentlich würde ich gern sowas machen, wie:
Java:
...
sqlSelect.append(" and objekt1.getObjekts2().iterator().next().getId() IN (ein Subselect, der Ids von verschiedenen Objekt2 liefert)");
...
Mir ist klar, dass das Blödsinn ist, aber wie kann ich da denn sonst drankommen? Für den Subselect brauche ich keine Hilfe. Nur für den ersten Teil.

Danke im vorraus,
Sina
 
M

maki

Gast
In meinem Datenmodell(richtiger Begriff? Ich meine die Java-Seite)
Je nachdem, "Datenmodell" beschreibt eigentlich nur die Relationen zwischen Daten, kein Verhalten.
Wenn deine Klassen "dumme" JavaBeans sind ohne Logik und nur mit Gettern & Settern, dann passt Datenmodell.
Wenn auch verhalten (also Logik) in den Klassen steckt, wäre es wohl ein Domänenmodell.
Im Allgemeinen wird aber nicht so genau unterschieden...

habe ich eine n-n-Beziehung. In der Realität ist es jedoch so, dass hier eine 1-1 Beziehung besteht. In Zukunft soll das wohl an dem Modell geändert werden. Momentan steht das jedoch nicht in meiner Macht dies zu tun.
Persönlich würde ich dann eine 1:1 Beziehung machen, ist viel einfacher, und wer weiss ob die Änderung wirklich noch kommt... und wenn sie kommt, ob nicht noch mehr Änderungen kommen und was dann alles geändert werden muss.
Es ist tatsächlich so, dass Dinge sich am einfachsten ändern lassen, wenn sie einfach sind :)

Nun möchte ich ein Objekt, von dem ich weiß, dass es sich als einziges in der Liste befindet, auf etwas prüfen, weiß aber nicht, wie ich das realisiere,
Hibernate bietet neben der HQL auch noch die Criteria API, solltest dir beides mal ansehen ;)
 

sina.die

Mitglied
Persönlich würde ich dann eine 1:1 Beziehung machen, ist viel einfacher, und wer weiss ob die Änderung wirklich noch kommt... und wenn sie kommt, ob nicht noch mehr Änderungen kommen und was dann alles geändert werden muss.
Es ist tatsächlich so, dass Dinge sich am einfachsten ändern lassen, wenn sie einfach sind :)
Ich habe leider keine Berechtigung dies in dem Datenmodell zu tun :-(
Und die Mühlen nach oben hin mahlen langsam...

Hibernate bietet neben der HQL auch noch die Criteria API, solltest dir beides mal ansehen ;)
Danke, gesehen hab ich das auch schon. Wühle mich noch durch den Code von Vorgängern... Es waren wohl mehrere am Werk und die Anfragen wurden unterschiedlich implementiert. Aber wie ich das Problem damit löse, weiß ich auch nicht.
 
G

gman

Gast
Hi,

ich bin mir nicht sicher ob ich deine Frage jetzt richtig verstanden habe. Aber wenn du das "objekt1" hast, dann mach doch einfach das was du als Beispiel geschrieben hast:

Java:
sqlSelect.append(" and ");
sqlSelect.append(objekt1.getObjekts2().iterator().next().getId());
sqlSelect.append(" IN (Subselect)");

Oder musst du mit der Abfrage erstmal beide Objekte ermitteln?

Gruß
 

sina.die

Mitglied
Oder musst du mit der Abfrage erstmal beide Objekte ermitteln?
Ja, ich habe objekt1 an der Stelle noch nicht. Ich versuche, dass mal irgendwie umzubiegen, bin aber weiterhin für andere Vorschläge dankbar.

Edit:
Und das Problem ist auch, dass ich in der Anfrage auch mehrere objekt1 erwarte, die als Bedingung haben, dass sie ein objekt2 in einer Liste besitzen, welches eine Id hat aus der Liste mit Ids aus dem Subselect.

Ich meine, irgendwie komme ich an die Daten. Meine Notlösung war nun erstmal die Ids vom Typ Objekt2 in einer Liste zu holen und im Javacode habe ich es dann durch for-Schleifen laufen lassen, um an die richtigen Objekte vom Typ 1 zu kommen, aber es kommt mir halt falsch vor in einer DB-Anfrage mehr Daten zu holen, als ich eigentlich brauche.
 
Zuletzt bearbeitet:

byte

Top Contributor
Mit HQL kannst Du das in etwa so erreichen (
Code:
objekts
ist der Name des Members in Klasse
Code:
Foobar
):

SQL:
from Foobar foo where foo.objekts[0].id in ( SUBSELECT )
 

sina.die

Mitglied
Danke, das wäre perfekt.
Ich habe es gerade ausprobiert und bekomme sowas: org.hibernate.QueryException: unindexed fromElement before []

Ich nehme an, es liegt daran, dass da HashSets benutzt werden. Die eigentliche Auflösung zu dem Objekt, welches ich bräuchte, sähe etwa so aus: foo.objekts.set.map.table[?]
 

byte

Top Contributor
Das funktioniert nur bei indexed collections, also nicht bei Sets. Da fällt mir aber ein, Du kannst doch auch einfach sowas machen, wenns objekts sowieso nur 1 Element enthält:

SQL:
FROM Foobar foo WHERE foo.objekts.id IN ( SUBSELECT )
 

sina.die

Mitglied
Hmm, da bekomme ich dann sowas:

org.hibernate.QueryException: illegal attempt to dereference collection [objekt10_.OBJEKT1_ID.objects2] with element property reference [objekt2Id]

(Habe die Namen manuell in Objekt1 und Objekt2 geändert, eigentlich heißen sie anders - nur falls ich mich irgendwo vertippt habe und irgendwas unlogisch ist...)
 

byte

Top Contributor
Hm, sagt mir gar nix. Vielleicht mal explizit joinen?

SQL:
FROM Foobar foo left join foo.objekts o WHERE o.id IN ( SUBSELECT )

Was generiert er denn für ein SQL und wie sieht das Mapping aus?
 
Status
Nicht offen für weitere Antworten.
Ä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