H2 Hibernate - wie joins machen

  • Themenstarter Themenstarter gegenpol
  • Beginndatum Beginndatum
G

gegenpol

Gast
Hallo ich hoffe ich kann hier posten..

Meine Frage ist, wie holt man sich mit Hibernate spezifische Datensätzen, bzw. wie werden sie gemappt. Wenn ich z.B zwei Klassen habe (Day 1---zu---n Person), dann mach ich eine @OneToMany Annotation in die Klasse Day für das field persons, da ich bestimmte Days laden will, mit den dazugehörigen Persons.


Wenn ich jetzt manuell einen select schreibe, mappt Hibernate natürlich alles - also alle Persons. Das person field in der Day Klasse brauche ich natürlich, um neue Datensätze anzulegen bzw. vorhandene zu updaten.

SQL:
select Day as day left join day.person as person with person.id = 3 ....

Da bekomme ich dann alle Persons. Doch ich mach den manuellen select ja, weil ich ganz bestimmte Daten brauch.

Beim Durchlesen der Hibernate Doku bin ich nur auf das da gestoßen:

select new package.MyDBQueryResultKlasse(param, param, ...) from ....

Aber eigentlich bringt mir das doch nichts, weil wenn ich nur noch genau das selektiere was ich möchte (in eine neue Klasse), dann kann ich das Zeug ja nicht mehr persitieren.

Ich kanns auch nicht von der Klasse Person aus mappen, weil Hibernate das dann nicht verarbeiten kann wie ein Test gezeigt hat. Ich muss dann also trotzdem ein field persons mit @OneToMany (und mappedBy) in die Klasse Day rein machen, weil ein mappedBy von der @ManyToOne funktioniert nicht (da meckert schon der Compiler).

Wie macht man das? Wie geht man das an? 😱 Ich brauch keine detaillierte Beschreibung - ein Hinweis auf die prinzipielle Richtung wäre schon ausreichend ..


Code:
[n] Person
-------------
@ManyToOne
- Day day


Code:
[1] Day
-------------
@OneToMany (mappedBy="Day")
- List<Person> persons
 
Mal von dem genannten Problem abgesehen komm ich auch nicht weiter, wenn ich auf das Zuviel der Daten pfeife:

SQL:
select *

from  Day
			
left join Person  on  Person.day_id = Day.id   and  Person.feature_id = 1
			
where Day.date >=  '2014-07-01'  and Day.date <= '2014-07-31'

Dieser Select liefert genau was ich brauche: Alle Days, und die Personen dazu falls vorhanden aber wenn vorhanden nur dann, wenn wenn sie ein bestimmtes Feature haben. Die Days bleiben aber immer voll da. (Hab ich an der DB getestet - funktioniert).

Doch wie packe ich das in HQL/Hibernate? Bzw. wie greife ich in Hibernate auf die Person.feature_id zu ???:L

Das ist ja in der Java Klasse ein @ManyToOne Objekt. Ich müsste die Feature Tabelle erst joinen, um auf die Id zuzugreifen, doch sobald ich das mache, bekomme ich entweder zu viele oder zu wenige Sätze. (Das dazugehörige von außen kommende Feature-Objekt entsteht bei einer Benutzereingabe.)
 

Neue Themen


Zurück
Oben