-->
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.  [ 4 posts ] 
Author Message
 Post subject: QBE Problem
PostPosted: Wed Feb 09, 2005 11:32 am 
Beginner
Beginner

Joined: Thu Oct 14, 2004 5:07 am
Posts: 37
Location: Cambridge, UK
Hi,

I have a QBE query where I have an Offence Entity, that has a foreign key Entity called 'FleetVehicle'. The associations are setup correctly I believe.

The Offence POJO Entity contains a FleetVehicle POJO/Entity but when I reference fleetVehicle.registrationNumber (I expect the QBE to do the join for me...) it bails complaining that it cannot resolve the field registrationNumber in the Offence entity??

Hibernate version:2.1.7

Mapping documents:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1

http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->

<class
name="com.ocado.tracker.offences.pojo.Offence"
table="OFFENCES"
schema="trkdba"
>

<id
name="offenceUuid"
type="java.lang.Long"
column="OFFENCE_UUID"
>
<meta attribute="use-in-equals">true</meta>
<generator class="sequence">
<param name="sequence">OFFENCES_SEQ</param>
</generator>
</id>

<property
name="status"
type="java.lang.String"
column="STATUS"
not-null="true"
length="20"
/>
<property
name="authority"
type="java.lang.String"
column="AUTHORITY"
length="20"
/>
<property
name="ticketNumber"
type="java.lang.String"
column="TICKET_NUMBER"
length="20"
/>
<property
name="offence"
type="java.lang.String"
column="OFFENCE"
length="20"
/>

<property
name="datetimeOfOffence"
type="java.sql.Timestamp"
column="DATETIME_OF_OFFENCE"
length="7"
/>
<property
name="datetimeOfTicket"
type="java.sql.Timestamp"
column="DATETIME_OF_TICKET"
length="7"
/>
<property
name="parkingAttendant"
type="java.lang.String"
column="PARKING_ATTENDANT"
length="20"
/>
<property
name="site"
type="java.lang.Integer"
column="SITE"
length="22"
/>
<property
name="locOfOffence"
type="java.lang.String"
column="LOC_OF_OFFENCE"
length="30"
/>
<property
name="postcode"
type="java.lang.String"
column="POSTCODE"
length="8"
/>
<property
name="creditcardAuth"
type="java.lang.String"
column="CREDITCARD_AUTH"
length="10"
/>
<property
name="fine"
type="java.lang.Integer"
column="FINE"
length="22"
/>
<property
name="amountPaid"
type="java.lang.Integer"
column="AMOUNT_PAID"
length="22"
/>
<property
name="orderNumber"
type="java.lang.String"
column="ORDER_NUMBER"
length="10"
/>
<property
name="routeId"
type="java.lang.String"
column="ROUTE_ID"
length="10"
/>
<property
name="enteredBy"
type="java.lang.String"
column="ENTERED_BY"
not-null="true"
length="50"
/>
<property
name="assignedTo"
type="java.lang.String"
column="ASSIGNED_TO"
length="50"
/>
<property
name="lastModified"
type="java.sql.Timestamp"
column="LAST_MODIFIED"
not-null="true"
length="7"
/>
<property
name="lastModifiedBy"
type="java.lang.String"
column="LAST_MODIFIED_BY"
not-null="true"
length="50"
/>
<property
name="creationDate"
type="java.sql.Timestamp"
column="CREATION_DATE"
not-null="true"
length="7"
/>

<!-- Associations -->

<many-to-one
name="fleetVehicle"
class="com.ocado.tracker.fleet.pojo.FleetVehicle"
column="fleet_uuid"
not-null="false"
/>

<many-to-one
name="employee"
class="com.ocado.tracker.employees.pojo.Employee"
column="employee_uuid"
not-null="false"
/>



</class>
</hibernate-mapping>



<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1

http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->

<class
name="com.ocado.tracker.fleet.pojo.FleetVehicle"
table="FLEET_VEHICLES"
schema="trkdba"
>

<id
name="fleetUuid"
type="java.lang.String"
column="FLEET_UUID"
>
<meta attribute="use-in-equals">true</meta>
<generator class="sequence">
<param name="sequence">FLEET_VEHICLES_SEQ</param>
</generator>
</id>

<property
name="registrationNumber"
type="java.lang.String"
column="REGISTRATION_NUMBER"
length="10"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="trailerId"
type="java.lang.String"
column="TRAILER_ID"
length="20"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="podOcadoId"
type="java.lang.String"
column="POD_OCADO_ID"
length="20"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="podBuildNumber"
type="java.lang.String"
column="POD_BUILD_NUMBER"
length="10"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="chassisNumber"
type="java.lang.String"
column="CHASSIS_NUMBER"
length="30"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="pdiDate"
type="java.sql.Timestamp"
column="PDI_DATE"
length="7"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="tacho"
type="java.sql.Timestamp"
column="TACHO"
length="7"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="engineSize"
type="java.lang.String"
column="ENGINE_SIZE"
length="20"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="engineNumber"
type="java.lang.String"
column="ENGINE_NUMBER"
length="30"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="fridgeSerialNumber"
type="java.lang.String"
column="FRIDGE_SERIAL_NUMBER"
length="20"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="liverycolour"
type="java.lang.Integer"
column="LIVERYCOLOUR"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="grossweight"
type="java.lang.String"
column="GROSSWEIGHT"
length="10"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="ministryId"
type="java.lang.String"
column="MINISTRY_ID"
length="10"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="model"
type="java.lang.String"
column="MODEL"
length="20"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="make"
type="java.lang.String"
column="MAKE"
length="20"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="motDueDate"
type="java.sql.Timestamp"
column="MOT_DUE_DATE"
length="7"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="taxDueDate"
type="java.sql.Timestamp"
column="TAX_DUE_DATE"
length="7"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="serviceDueDate"
type="java.sql.Timestamp"
column="SERVICE_DUE_DATE"
length="7"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="hire"
type="java.lang.String"
column="HIRE"
length="1"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="vehicleType"
type="java.lang.String"
column="VEHICLE_TYPE"
length="20"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="value"
type="java.lang.Integer"
column="VALUE"
length="22"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="cover"
type="java.lang.String"
column="COVER"
length="20"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="lastModifiedDate"
type="java.sql.Timestamp"
column="LAST_MODIFIED_DATE"
not-null="true"
length="7"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="lastModifiedBy"
type="java.lang.String"
column="LAST_MODIFIED_BY"
not-null="true"
length="50"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="creationDate"
type="java.sql.Timestamp"
column="CREATION_DATE"
not-null="true"
length="7"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="motCompletedDate"
type="java.sql.Timestamp"
column="MOT_COMPLETED_DATE"
length="7"
>
<meta attribute="use-in-tostring">true</meta>
</property>
<property
name="serviceCompletedDate"
type="java.sql.Timestamp"
column="SERVICE_COMPLETED_DATE"
length="7"
>
<meta attribute="use-in-tostring">true</meta>
</property>

<!-- Associations -->
<!-- uni-directional one-to-many association to CustomerCard -->
<set name="offences"
lazy="true"
inverse="true"
cascade="save-update">
<key>
<column name="offence_uuid" />
</key>
<one-to-many class="com.ocado.tracker.offences.pojo.Offence"/>
</set>



</class>
</hibernate-mapping>





Code between sessionFactory.openSession() and session.close():

return (List) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {


Example exampleOffence = Example.create(offence)
.ignoreCase()
.enableLike(MatchMode.ANYWHERE);


Criteria criteria = session.createCriteria(Offence.class);

if (validate(offence.getRegistrationNumber()))
{
// ilike does a case insensitve match
criteria.add(Expression.ilike("registrationNumber", offence.getRegistrationNumber(), MatchMode.ANYWHERE));
}
if (validate(offence.getStatus()))
{
criteria.add(Expression.ilike("status", offence.getStatus(), MatchMode.ANYWHERE));
}
if (offence.getOffenceUuid()!=null)
{
criteria.add(Expression.eq("offenceUuid", offence.getOffenceUuid()));
}
if (validate(offence.getOffence()))
{
criteria.add(Expression.ilike("offence", offence.getOffence(), MatchMode.ANYWHERE));
}
if (validate(offence.getRegistrationNumber()))
{
[b]criteria.add(Expression.ilike("fleetVehicle.registrationNumber", offence.getRegistrationNumber(), MatchMode.ANYWHERE));
}
return criteria.list();
}
});


[/b]

Full stack trace of any exception that occurs:
org.springframework.orm.hibernate.HibernateQueryException: could not resolve property: registrationNumber of:

com.ocado.tracker.offences.pojo.Offence; nested exception is net.sf.hibernate.QueryException: could not resolve property: registrationNumber of: com.ocado.tracker.offences.pojo.Offence
net.sf.hibernate.QueryException: could not resolve property: registrationNumber of: com.ocado.tracker.offences.pojo.Offence
at net.sf.hibernate.persister.AbstractPropertyMapping.toColumns(AbstractPropertyMapping.java:50)
at net.sf.hibernate.expression.AbstractCriterion.getColumns(AbstractCriterion.java:42)
at net.sf.hibernate.expression.IlikeExpression.toSqlString(IlikeExpression.java:32)
at net.sf.hibernate.loader.CriteriaLoader.<init>(CriteriaLoader.java:64)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:3630)
at net.sf.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:238)
at com.ocado.tracker.offences.dao.hibernate.OffencesDAOHibernate$1.doInHibernate(Unknown Source)
at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:312)
at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:289)


Name and version of the database you are using:Oracle 9i

The generated SQL (show_sql=true):

Debug level Hibernate log excerpt:


Top
 Profile  
 
 Post subject: Sorted
PostPosted: Wed Feb 09, 2005 11:48 am 
Beginner
Beginner

Joined: Thu Oct 14, 2004 5:07 am
Posts: 37
Location: Cambridge, UK
Sorry, problem my end... I *was* referring to offence registrationNumber in the QBE at the top of the query.... but with that removed I still get an error:

{ERROR} actions.ViewAction Thread [http-8080-Processor4]; Error when loading offences [could not resolve property: fleetVehicle.registrationNumber of: com.ocado.tracker.offences.pojo.Offence; nested exception is net.sf.hibernate.QueryException: could not resolve property: fleetVehicle.registrationNumber of: com.ocado.tracker.offences.pojo.Offence]
org.springframework.orm.hibernate.HibernateQueryException: could not resolve property:

fleetVehicle.registrationNumber of: com.ocado.tracker.offences.pojo.Offence; nested exception is

net.sf.hibernate.QueryException: could not resolve property: fleetVehicle.registrationNumber of:

com.ocado.tracker.offences.pojo.Offence
net.sf.hibernate.QueryException: could not resolve property: fleetVehicle.registrationNumber of: com.ocado.tracker.offences.pojo.Offence

Can you actually use entity.foreignEntity notation in QBE?


Top
 Profile  
 
 Post subject:
PostPosted: Wed Feb 09, 2005 11:52 am 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 12:50 pm
Posts: 5130
Location: Melbourne, Australia
No. Associations are not included by and Example.


Top
 Profile  
 
 Post subject: The QBE Association Solution
PostPosted: Wed Feb 09, 2005 11:59 am 
Beginner
Beginner

Joined: Thu Oct 14, 2004 5:07 am
Posts: 37
Location: Cambridge, UK
It seems to work nicely:

Offence is the parent and FleetVehicle my association:

Example exampleOffence = Example.create(offence)
.ignoreCase()
.enableLike(MatchMode.ANYWHERE);

Criteria criteria = session.createCriteria(Offence.class);

criteria.createCriteria("fleetVehicle").add(Expression.ilike("registrationNumber", "aregnumber", MatchMode.ANYWHERE));

return criteria.list();


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 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.