Join n:m

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Hallo,

muss wieder mal um ein SQL- Statement fragen, DB Vorlesung ist schon lange her und im Skriptum find ichs auch nicht.

bei 3 Tabellen (Person, Person_Event, Events): wie kann ich zu einer Person alle Events finden.
Wäre Euch sehr dankbar.
lg
 
SQL:
SELECT ev.*
FROM event ev
INNER JOIN person_event pe_ev 
  ON  pe_ev.id_event = ev.id
  AND pe_ev.id_person = :idDerPerson
 
SQL:
SELECT ev.*
FROM event ev
INNER JOIN person_event pe_ev 
  ON  pe_ev.id_event = ev.id
  AND pe_ev.id_person = :idDerPerson

Vielen Dank, ein Problem hab ich noch, ich würde das in HQL benötigen.
Kann man das auf die schnelle umschreiben,
Danke noch mals,
lg
 
Auf die Schnelle:

[HQL]SELECT e
FROM Event e
JOIN e.persons p
WHERE p.id = :idDerPerson[/HQL]
 
Da bekomme ich eine Exception:

could not resolve property: Person of: org.hibernate.tutorial.domain.Event [SELECT e
FROM org.hibernate.tutorial.domain.Event e JOIN e.Person p WHERE p.id = 😛ersonId]
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:67)

aber kein wunder, ich hab (auch) keine Ahnung von HQL.
Wäre dir nochmals sehr dankbar für Hilfe,
lg

Java:
final List list = session.createQuery("SELECT e FROM Event e JOIN e.Person p WHERE 
p.id = :personId").setString("personId", Long.toString(personId)).list();


Java:
<hibernate-mapping package="org.hibernate.tutorial.domain">
  <class name="Event" table="EVENTS">
    <id column="EVENT_ID" name="id">
      <generator class="increment"/>
    </id>
    <property column="EVENT_DATE" name="date" type="timestamp"/>
    <property name="title"/>
    <set inverse="true" name="participants" table="PERSON_EVENT">
      <key column="EVENT_ID"/>
      <many-to-many class="Person" column="PERSON_ID"/>
    </set>
  </class>
</hibernate-mapping>

Java:
<hibernate-mapping package="org.hibernate.tutorial.domain">
  <class name="Person" table="PERSON">
    <id column="PERSON_ID" name="id">
      <generator class="increment"/>
    </id>
    <property name="age"/>
    <property name="firstname"/>
    <property name="lastname"/>
    <set cascade="all-delete-orphan" name="events" table="PERSON_EVENT">
      <key column="PERSON_ID"/>
      <many-to-many class="Event" column="EVENT_ID"/>
    </set>
  </class>
</hibernate-mapping>
 
Wie schaut denn deine Event Klasse aus? Evtl.

[HQL]SELECT e
FROM Event e
JOIN e.participants p
WHERE p.id = :idDerPerson[/HQL]
 
Wie schaut denn deine Event Klasse aus? Evtl.

[HQL]SELECT e
FROM Event e
JOIN e.participants p
WHERE p.id = :idDerPerson[/HQL]

Halleluja, so funktionierts, mühsam ernährt sich das Eichhörnchen,
ich seh mich schon im Urlaub mit einem Hibernate- Buch herumlaufen, das wäre nicht das schlechteste 😳
besten dank für deine Hilfe!!
 
Halleluja, so funktionierts, mühsam ernährt sich das Eichhörnchen,
ich seh mich schon im Urlaub mit einem Hibernate- Buch herumlaufen, das wäre nicht das schlechteste 😳
besten dank für deine Hilfe!!

Wäre wohl das sinnvollste. Aber zumindest die Basics sind nicht kompliziert. Du fragst keine Tabellen sondern Klassen (bzw. Objekte ab) und greifst auch nicht auf Tabellenspalten, sondern auf Attribute zu. "Sonst" hat sich nichts verändert 😉
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben