Ein Objekt mit einem String aus einem Set laden

Rahmspinat

Aktives Mitglied
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.

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
 

Rahmspinat

Aktives Mitglied
Danke SlaterB,

das funktioniert super!

Hibernate ist schon cool, aber zurzeit hemmt es ehr noch meinen Entwicklungsprozess.

Nochn bissel mehr mit beschäftigen und es wird spitze :D
 

Ähnliche Java Themen


Oben