-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 12 posts ] 
Author Message
 Post subject: Component Mapping and query
PostPosted: Sun Oct 16, 2005 3:25 am 
Beginner
Beginner

Joined: Sun Oct 16, 2005 3:07 am
Posts: 33
Location: Sydney
Hibernate version: 3

I am new to Hibernate and am having a few problems getting going. I have a Customer class with a few properties, and a component class, ContactDetails, which has properties of it's own. The Customer class can contain an instance of ContactDetails. I have mapped this in a Customer.hbm.xml file, below. The mapping is contained in hibernate.cfg.xml, also below. The customer table in my database (MySQL) contains the properties of the Customer and ContactDetails classes. I am trying to issue a query that checks if a specified email address already exists but I get an exception stating that ContactDetails is not mapped.

The query I am using is:
String SQL_QUERY = "select customer from Customer cust," +
" ContactDetails cont where cont.emailAddress = :email";
Query query = session.createQuery(SQL_QUERY);
query.setString("email", emailAddress);
if(query != null && query.list().size() > 0)
{
return true;
}
return false;

<hibernate-mapping>

<class name="com.wikidsistas.persistence.Customer" table="customer">
<id name="custId" column="cust_id" type="long">
<generator class="assigned"/>
</id>
<property name="title" type="string" column="title"/>
<property name="firstName" type="string" column="first_name"/>
<property name="surname" type="string" column="surname"/>
<property name="subscribed" type="boolean" column="subscribed"/>
<component name="ContactDetails" class="com.wikidsistas.persistence.ContactDetails">
<property name="emailAddress"/>
<property name="mobilePhone"/>
<property name="phoneOther"/>
<property name="addressLine1"/>
<property name="addressLine2"/>
<property name="suburb"/>
<property name="state"/>
<property name="postcode"/>
</component>
</class>:



<hibernate-configuration>

<session-factory>

<property name="connection.datasource">java:comp/env/jdbc/wikidsistas</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- Mapping files -->
<mapping resource="Customer.hbm.xml"/>

</session-factory>

</hibernate-configuration>



org.hibernate.hql.ast.QuerySyntaxException: ContactDetails is not mapped. [select customer from com.wikidsistas.persistence.Customer cust, ContactDetails cont where cont.emailAddress = :email]
at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:145)
at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:86)
at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:260)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3033)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2922)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:690)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:546)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:283)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:214)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:154)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:101)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:473)
at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:1032)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:982)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at com.wikidsistas.dataaccessobjects.hibernate.CustomerDAOHibernate.isDuplicateEmail(CustomerDAOHibernate.java:121)
at com.wikidsistas.dataaccessobjects.hibernate.CustomerDAOHibernate.insertCustomer(CustomerDAOHibernate.java:60)
at com.wikidsistas.customer.SaveCustomerAction.execute(SaveCustomerAction.java:112)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:738)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
Caused by: ContactDetails is not mapped.
... 41 more


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 16, 2005 12:10 pm 
Expert
Expert

Joined: Mon Jul 04, 2005 5:19 pm
Posts: 720
try using something like this for hql

Code:
select customer from Customer cust where cust.contactDetails.emailAddress = :email


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 16, 2005 6:09 pm 
Beginner
Beginner

Joined: Sun Oct 16, 2005 3:07 am
Posts: 33
Location: Sydney
Thanks Dennis.

I tried your suggestion but now I get an exception stating that the property "contactDetails" of Customer cannot be resolved. The Customer class does have a property of that name which is an instance of the ContactDetails class. Is there something missing from my Customer.hbm.xml file perhaps?

org.hibernate.QueryException: could not resolve property: contactDetails of: com.wikidsistas.persistence.Customer [select customer from com.wikidsistas.persistence.Customer cust where cust.contactDetails.emailAddress = :email]
at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:37)
at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1264)
at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:278)
at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:372)
at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:528)
at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:221)
at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:172)
at org.hibernate.hql.ast.tree.DotNode.resolveFirstChild(DotNode.java:139)
at org.hibernate.hql.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:394)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4308)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1213)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4024)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3501)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1760)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:778)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:579)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:283)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:214)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:154)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:101)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:473)
at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:1032)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:982)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at com.wikidsistas.dataaccessobjects.hibernate.CustomerDAOHibernate.isDuplicateEmail(CustomerDAOHibernate.java:121)
at com.wikidsistas.dataaccessobjects.hibernate.CustomerDAOHibernate.insertCustomer(CustomerDAOHibernate.java:60)
at com.wikidsistas.customer.SaveCustomerAction.execute(SaveCustomerAction.java:112)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:738)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 16, 2005 7:51 pm 
Expert
Expert

Joined: Mon Jul 04, 2005 5:19 pm
Posts: 720
If there is a com.Foo component mapped in Customer.hbm.xml then Customer.java needs a public getter and setter for the com.Foo component ;)


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 16, 2005 7:54 pm 
Beginner
Beginner

Joined: Sun Oct 16, 2005 3:07 am
Posts: 33
Location: Sydney
Customer.java has public getter and setter methods for the component class


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 16, 2005 9:40 pm 
Expert
Expert

Joined: Mon Jul 04, 2005 5:19 pm
Posts: 720
alright, let's see Customer.java ...


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 16, 2005 9:54 pm 
Beginner
Beginner

Joined: Sun Oct 16, 2005 3:07 am
Posts: 33
Location: Sydney
/*
* Customer.java
*
* Created on October 13, 2005, 12:58 PM
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/

package com.wikidsistas.persistence;



/**
*
* @author Craig Chapman
*/
public class Customer
{
private long custId;
//Customer Title
private String title;
//Customer first name(s)
private String firstName;
//Customer surname
private String surname;
//Customer subscription status
private boolean subscribed;
//Customer contact details
private ContactDetails contactDetails;


/** Creates a new instance of Customer */
public Customer()
{
}

/**
* Get this customers id
* @return - An int containing the customer id
*/
public long getCustId()
{
return this.custId;
}

/**
* Set the customer id
* @param int - An int containing the customer id
*/
private void setCustId(long cusId)
{
this.custId = cusId;
}

/**
*
* @param title The customer title
*/
public void setTitle(String title)
{
this.title = title;
}

/**
*
* @return String The customer title
*/
public String getTitle()
{
return this.title;
}

/**
*
* @param firstName The customers first name
*/
public void setFirstName(String firstName)
{
this.firstName = firstName;
}

/**
*
* @return String The customer first name
*/
public String getFirstName()
{
return this.firstName;
}

/**
*
* @param surname The customer surname
*/
public void setSurname(String surname)
{
this.surname = surname;
}

/**
*
* @return The customer surname
*/
public String getSurname()
{
return this.surname;
}


/**
*
* @param subscribed The customer subscription status
*/
public void setSubscribed(boolean subscribed)
{
this.subscribed = subscribed;
}

/**
*
* @return String The customer subscription status
*/
public boolean getSubscribed()
{
return this.subscribed;
}

/**
*
* Set the customers contact details
*/
public void setContactDetails(ContactDetails contactDtls)
{
this.contactDetails = contactDtls;
}

/**
* Return this customers contact details
* @return a {@link ContactDetails} object containing
* the cusctomer contact details
*/
public ContactDetails getContactDetails()
{
return this.contactDetails;
}
}


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 16, 2005 10:53 pm 
Expert
Expert

Joined: Mon Jul 04, 2005 5:19 pm
Posts: 720
try changing ContactDetails to contactDetails in the hbm.xml file.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 16, 2005 11:03 pm 
Beginner
Beginner

Joined: Sun Oct 16, 2005 3:07 am
Posts: 33
Location: Sydney
Ok, tried that but now this exception occurs.

java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode
\-[IDENT] IdentNode: 'customer' {originalText=customer}

at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:139)
at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:601)
at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:463)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:647)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:283)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:214)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:154)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:101)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:473)
at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:1032)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:982)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at com.wikidsistas.dataaccessobjects.hibernate.CustomerDAOHibernate.isDuplicateEmail(CustomerDAOHibernate.java:121)
at com.wikidsistas.dataaccessobjects.hibernate.CustomerDAOHibernate.insertCustomer(CustomerDAOHibernate.java:60)
at com.wikidsistas.customer.SaveCustomerAction.execute(SaveCustomerAction.java:112)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:738)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 16, 2005 11:19 pm 
Expert
Expert

Joined: Mon Jul 04, 2005 5:19 pm
Posts: 720
OK, you are one step away from being an official Hibernate Jedi ;) just change "select customer from Customer " to "from Customer " .


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 16, 2005 11:21 pm 
Beginner
Beginner

Joined: Sun Oct 16, 2005 3:07 am
Posts: 33
Location: Sydney
Yes, I just figured that one out. Thanks for all your help.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 16, 2005 11:23 pm 
Expert
Expert

Joined: Mon Jul 04, 2005 5:19 pm
Posts: 720
sure you did ;)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 12 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.