hi,
i´d like to receive data via HQL but the query does not select data from the given class. Hibernate tries to select data from a subclass but this subclass is not mapped as a subclass. (no possibility to mix subclass and joined subclass)
I would like to select data from class Asset but hibernate tries to get data from class phonenuber (see the following code for details)
i have the following class hierachy:
class item{
...
}
class asset extends item{
...
}
class phonenumber extends asset{
...
}
Mapping documents:
Mapping of class item and asset:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping package="at.telekom.handy.dto" >
<class name="Item" table="item" discriminator-value="0">
<id name="id" type="integer" unsaved-value="-1">
<column name="id" sql-type="number" not-null="true" />
<generator class="sequence">
<param name="sequence">item_seq</param>
</generator>
</id>
<!-- in der db wird gespeichert welche (sub)klasse verwendet wird -->
<!--property name="isAsset" /-->
<discriminator column="isasset" />
<property name="importId" column="importid" />
<property name="usage" column="usage" />
<subclass name="Asset" discriminator-value="1" lazy="false">
<property name="ordernumber" column="ordernumber" />
<property name="stockreceiptnumber" column="stockreceiptnumber" />
<property name="novel" column="novel" />
<many-to-one name="replacementFor" class="Asset" column="replacementfor" />
</subclass>
...
</class>
</hibernate-mapping>
mapping of class phonenumber:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping package="at.telekom.handy.dto" >
<class name="Phonenumber" table="phonenumber">
<id name="id" type="integer" unsaved-value="-1">
<column name="item_id" sql-type="number" not-null="true" />
<generator class="assigned">
</generator>
</id>
<property name="phonenumber" column="phonenumber" not-null="true" />
<property name="shortPhonenumber" column="shortphonenumber" />
<property name="visibleInCD" column="visible" />
<property name="visibleReason" column="visiblereason" />
</class>
...
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():
public List listForSAPOrder(String ordernumber, String stockreceiptnumber) throws ApplicationException {
if (logger.isDebugEnabled())
logger.debug("> listForSAPOrder() ordernumber: " + ordernumber + " stockreceiptNr: " + stockreceiptnumber);
try {
Session session = currentSession();
Query q = session.createQuery("from at.telekom.handy.dto.Asset as i where i.ordernumber = ? and i.stockreceiptnumber = ?");
q.setString(0, ordernumber);
q.setString(1, stockreceiptnumber);
return q.list();
}
catch (HibernateException e) {
logger.error("Fehler beim holen der Item Einträge zu ordernumber " + ordernumber +
", stockreceiptnumber: " + stockreceiptnumber, e);
throw new ApplicationException("error calling ItemDAO.listForSAPOrder(String, String)", e);
}
}
Full stack trace of any exception that occurs:
11:53:50,358 ERROR AssetDAO:597 - Fehler beim holen der Item Einträge zu ordernumber 4200, stockreceiptnumber: 4500
net.sf.hibernate.QueryException: could not resolve property: ordernumber of: at.telekom.handy.dto.Phonenumber [from at.telekom.handy.dto.Phonenumber as i where i.ordernumber = ? and i.stockreceiptnumber = ?]
at net.sf.hibernate.persister.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:38)
at net.sf.hibernate.hql.PathExpressionParser.getPropertyType(PathExpressionParser.java:249)
at net.sf.hibernate.hql.PathExpressionParser.end(PathExpressionParser.java:288)
at net.sf.hibernate.hql.WhereParser.doPathExpression(WhereParser.java:336)
at net.sf.hibernate.hql.WhereParser.doToken(WhereParser.java:366)
at net.sf.hibernate.hql.WhereParser.token(WhereParser.java:251)
at net.sf.hibernate.hql.ClauseParser.token(ClauseParser.java:87)
...
|