According to this section of the Hibernate documentati开发者_开发知识库on I should be able to query any java class in HQL
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-polymorphism
Unfortunately when I run this query...
"from Transaction trans where trans.envelopeId=:envelopeId"
I get the message "Transaction is not mapped [from Transaction trans where trans.envelopeId=:envelopeId]".
Transaction is an interface, I have to entity classes that implement it, I want on HQL query to return a Collection of type Transaction.
Indeed, according to the Hibernate documentation on Polymorphic queries:
Hibernate queries can name any Java class or interface in the from clause. The query will return instances of all persistent classes that extend that class or implement the interface. The following query would return all persistent objects:
from java.lang.Object o
The interface Named might be implemented by various persistent classes:
from Named n, Named m where n.name = m.name
But because the interface is not mapped (and thus unknown), you need to use the fully qualified name in your HQL query:
from qualified.name.Transaction trans where trans.envelopeId=:envelopeId
This will return instances of all persistent classes that implement your Transaction
interface.
Try importing the interfaces so you don't have to specify the full path. I use a file called imports.hbm.xml to handle all interfaces:
<hibernate-mapping package="com...path.to.implementations">
<import class="com.path.to.interfaces.Transaction" rename="Transaction"/>
...
</hibernate-mapping>
Then add that to the configuration just like a normal mapping file.
I think you need to map the interface as the parent class and the implementing classes as its subclass.
http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#inheritance-strategies
精彩评论