Bonjour à tous,
Je suis face à un nouveau problème de requête Critéria :
J'ai une classe CallRouting qui possède le mapping suivant :
Code:
<?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="com.datamodel">
<class
name="CallRouting"
table="ROUTING"
abstract="false"
dynamic-update="false"
dynamic-insert="false"
select-before-update="false"
polymorphism="implicit"
optimistic-lock="version"
lazy="true">
<id
name="id"
type="string"
access="property"
unsaved-value="null">
<column
name="ID"
length="50"
/>
<generator class="assigned"/>
</id>
<property
name="allowed"
type="boolean"
access="property"
update="true"
insert="true"
lazy="false">
<column
name="ALLOWED"
unique="false"
not-null="true"
/>
</property>
<many-to-one
name="callerTypeGroup"
column="TYPE_GROUP"
class="com.datamodel.CallerTypeGroup"
fetch="select"/>
<many-to-one
name="reason"
column="REASON"
class="com.datamodel.RoutingReason"
fetch="select"/>
<any
name="target"
meta-type="string"
id-type="string">
<meta-value value="VocalMessage" class="com.datamodel.VocalMessage"/>
<meta-value value="NetworkEntity" class="com.datamodel.NetworkEntity"/>
<meta-value value="ForeignTarget" class="com.datamodel.ForeignTarget"/>
<meta-value value="Terminal" class="com.datamodel.Terminal"/>
<meta-value value="DisconnectCall" class="com.datamodel.DisconnectCall"/>
<meta-value value="RouteEnd" class="com.datamodel.RouteEnd"/>
<column name="TARGET_CLASS"/>
<column name="TARGET_ID"/>
</any>
<many-to-one
name="terminal"
column="TERMINAL"
class="com.datamodel.Terminal"
fetch="select"/>
</class>
</hibernate-mapping>
Le mapping "target" correspond à une interface "ICallableEntity". Cette interface définit notamment la methode getKey().
L'interface "ICallableEntity" n'a pas de mapping Hibernate, car les classes qui implémentent cette interface héritent déjà d'autres classes.
J'arrive a effectuer une requête en rajoutant des filtres sur mes différentes tables ; mais j'ai l'exception suivante dès que je veux rajouter un filtre sur le champ "key" de "target" :
Code:
java.lang.UnsupportedOperationException: any types do not have a unique referenced persister
ma requete est par exemple :
Code:
Criteria criteria = session.createCriteria(CallRouting.class)
.setProjection(Projections.property("terminal"))
.setProjection(Projections.distinct(Projections.property("terminal")));
criteria.createAlias("terminal", "terminal")
.add(Restrictions.eq("terminal.networkEntity.id",actionForm.getCurrAgencyId()));
criteria.createAlias("reason", "reason")
.add(Restrictions.eq("reason.id",RoutingReason.RR_NO_ANSWER));
criteria.createAlias("callerTypeGroup", "callerTypeGroup")
.add(Restrictions.eq("callerTypeGroup.editable",true))
.add(Restrictions.eq("callerTypeGroup.id",CallerTypeGroup.CTG_INTERNE));
criteria.createCriteria("target")
.add(Restrictions.eq("key","xxxxxxx"));
Auriez vous une solution pour permettre de spécifier un critère sur un des champs de l'interface (key par exemple) ?
Merci bcp.