schuby-doo
Grünschnabel
Hallo ich habe ein Problem mit Hibernate un Subselects bei Many-to-Many verknüpfungen.
Ich habe zwei Tabellen Person und Event, die über Sets und eine Verknüpfungstabelle Miteinander verbunden sind.
Das einfügen und Abrufen aus der Datenbank funktioniert. Nur bei Abfragen mit Subselects gibt es Probleme
Person.hbm.xml
Event.hbm.xml
Event.java
Person.java
Ich habe versucht aller Personen herauszufinden denen ein bestimtes Event zugeordnet ist.
Dabei bekomme ich immer folgende Fehlermeldung:
Habe ich bei der Abfrage einen denkfehler gemacht oder warum geht das nicht?
Die gesamten Dateien sind übrigens aus dem Hibernate Tutorial von hibernate.org
Ich weiß nicht, ob das irgend einen Einfuß hat aber die Datenbank ist Oracle 10
Vielen Dank im voraus für Eure Hilfe.
schuby-doo
Ich habe zwei Tabellen Person und Event, die über Sets und eine Verknüpfungstabelle Miteinander verbunden sind.
Das einfügen und Abrufen aus der Datenbank funktioniert. Nur bei Abfragen mit Subselects gibt es Probleme
Person.hbm.xml
Code:
<hibernate-mapping>
<class name="events.Person" table="PERSON">
<id name="id" column="PERSON_ID">
<generator class="native"/>
</id>
<property name="age"/>
<property name="firstname"/>
<property name="lastname"/>
<set name="events" table="PERSON_EVENT">
<key column="PERSON_ID"/>
<many-to-many column="EVENT_ID" class="events.Event"/>
</set>
</class>
Event.hbm.xml
Code:
<hibernate-mapping>
<class name="events.Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native"/>
</id>
<property name="date" type="timestamp" column="EVENT_DATE"/>
<property name="title"/>
<set name="participants" table="PERSON_EVENT" inverse="true">
<key column="EVENT_ID"/>
<many-to-many column="PERSON_ID" class="events.Person"/>
</set>
</class>
</hibernate-mapping>
Event.java
Code:
package events;
import java.util.*;
public class Event {
private Long id;
private String title;
private Date date;
private Set participants = new HashSet();
public Event() {}
public Long getId() {
return id;
}
private void setId(Long id) {
this.id = id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Set getParticipants() {
return participants;
}
public void setParticipants(Set participants) {
this.participants = participants;
}
}
Person.java
Code:
package events;
import java.util.*;
public class Person {
private Long id;
private int age;
private String firstname;
private String lastname;
private Set events = new HashSet();
public Person() {}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
// Defensive, convenience methods
protected Set getEvents() {
return events;
}
protected void setEvents(Set events) {
this.events = events;
}
public void addToEvent(Event event) {
this.getEvents().add(event);
event.getParticipants().add(this);
}
public void removeFromEvent(Event event) {
this.getEvents().remove(event);
event.getParticipants().remove(this);
}
}
Ich habe versucht aller Personen herauszufinden denen ein bestimtes Event zugeordnet ist.
Code:
Query q=session.createQuery("select p from Person p where p.events in (select e.id from Event e where e.title like '%1%' )");
List liste = q.list();
Dabei bekomme ich immer folgende Fehlermeldung:
Code:
Hibernate: select person0_.PERSON_ID as PERSON1_2_, person0_.age as age2_, person0_.firstname as firstname2_, person0_.lastname as lastname2_ from PERSON person0_, PERSON_EVENT events1_, EVENTS event2_ where person0_.PERSON_ID=events1_.PERSON_ID and events1_.EVENT_ID=event2_.EVENT_ID and (. in (select event3_.EVENT_ID from EVENTS event3_ where event3_.title like '%1%'))
2007-10-09 21:14:20,250 WARN [org.hibernate.util.JDBCExceptionReporter] - <SQL Error: 936, SQLState: 42000>
2007-10-09 21:14:20,250 ERROR [org.hibernate.util.JDBCExceptionReporter] - <ORA-00936: Ausdruck fehlt
>
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute query
Habe ich bei der Abfrage einen denkfehler gemacht oder warum geht das nicht?
Die gesamten Dateien sind übrigens aus dem Hibernate Tutorial von hibernate.org
Ich weiß nicht, ob das irgend einen Einfuß hat aber die Datenbank ist Oracle 10
Vielen Dank im voraus für Eure Hilfe.
schuby-doo