Hallo Leute,
ich beschäftige mich seit kurzem mit Hibernate und habe das folgende Tutorial durchgearbeitet
Chapter*1.*Tutorial
Unter anderem hat man dort die Situation dass man eine Klasse Person hat die als Attribut Set mit emailAddressen besitzt.
Ich würde jetzt ganz gerne ein Personenobject aus der Datenbank laden, das z.B. die Emailaddress = "heinz@test.de" besitzt.
Ich habe das wie folgt probiert:
Leider funktioniert das ganze so nicht und gibt dann den unten angehangenen Fehler aus.
Meine MappingXML für die Klasse Person sieht wie folgend aus:
[XML]<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.tutorial.domain">
<class name="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="Event"/>
</set>
<set name="emailAddresses" table="PERSON_EMAIL_ADDR">
<key column="PERSON_ID"/>
<element type="string" column="EMAIL_ADDR"/>
</set>
</class>
</hibernate-mapping>[/XML]
Es gibt doch sicher eine Möglichkeit wie ich das auslesen kann oder?
Gruß Martin
ich beschäftige mich seit kurzem mit Hibernate und habe das folgende Tutorial durchgearbeitet
Chapter*1.*Tutorial
Unter anderem hat man dort die Situation dass man eine Klasse Person hat die als Attribut Set mit emailAddressen besitzt.
Java:
private Set emailAddresses = new HashSet();
Ich würde jetzt ganz gerne ein Personenobject aus der Datenbank laden, das z.B. die Emailaddress = "heinz@test.de" besitzt.
Ich habe das wie folgt probiert:
Java:
private void loadPersonByEmail(String email) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
ArrayList<Person> personen = (ArrayList<Person>) session.createQuery("from Person where emailAddresses = '" + email + "'").list();
System.out.println(personen.get(0).getFirstname());
session.getTransaction().commit();
}
Leider funktioniert das ganze so nicht und gibt dann den unten angehangenen Fehler aus.
Meine MappingXML für die Klasse Person sieht wie folgend aus:
[XML]<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.tutorial.domain">
<class name="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="Event"/>
</set>
<set name="emailAddresses" table="PERSON_EMAIL_ADDR">
<key column="PERSON_ID"/>
<element type="string" column="EMAIL_ADDR"/>
</set>
</class>
</hibernate-mapping>[/XML]
Es gibt doch sicher eine Möglichkeit wie ich das auslesen kann oder?
Java:
Exception in thread "main" org.hibernate.TypeMismatchException: left and right hand sides of a binary logic operator were incompatibile [java.util.Set(org.hibernate.tutorial.domain.Person.emailAddresses) : string]
at org.hibernate.hql.ast.tree.BinaryLogicOperatorNode.mutateRowValueConstructorSyntaxesIfNecessary(BinaryLogicOperatorNode.java:86)
at org.hibernate.hql.ast.tree.BinaryLogicOperatorNode.initialize(BinaryLogicOperatorNode.java:75)
at org.hibernate.hql.ast.HqlSqlWalker.prepareLogicOperator(HqlSqlWalker.java:1153)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4328)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1909)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:824)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:610)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:294)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:237)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:98)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1760)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:344)
at $Proxy0.createQuery(Unknown Source)
at org.hibernate.tutorial.EventManager.loadPersonByEmail(EventManager.java:127)
at org.hibernate.tutorial.EventManager.main(EventManager.java:29)
Gruß Martin