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
 
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 😀
 

Zurück
Oben