sorry... was too short An "any" type has the special properties id and class, allowing us to express a join in the following way (where AuditLog.Item is a property mapped with <any>).
from Eg.AuditLog log, Eg.Payment payment where log.Item.class = 'Eg.Payment, Eg, Version=...' and log.Item.id = payment.id Notice that log.Item.class and payment.class would refer to the values of completely different database columns in the above query. 2010/2/18 Fabio Maulo <[email protected]> > Association.class = ...... > > 2010/2/18 Sergey Ishchenko <[email protected]> > > Hi! >> >> I've got two simple classes ClassA and ClassB mapped with table-per- >> concrete-class strategy. IssueClass can contain a reference to ClassA >> or to ClassB. Here is the mapping file: >> >> <?xml version="1.0" encoding="utf-8" ?> >> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" >> assembly="HqlIssue" namespace="HqlIssue"> >> >> <class name="ClassA" table="TableA"> >> <id name="Id" column="RowId" type="Guid" > >> <generator class="assigned" /> >> </id> >> </class> >> >> <class name="ClassB" table="TableB"> >> <id name="Id" column="RowId" type="Guid" > >> <generator class="assigned" /> >> </id> >> </class> >> >> <class name="IssueClass" table="Issue"> >> <id name="Id" column="RowId" type="Guid" > >> <generator class="assigned" /> >> </id> >> >> <any name="Association" access="property" >> id-type="Guid" >> meta-type="String"> >> <meta-value value="A" class="ClassA"/> >> <meta-value value="B" class="ClassB"/> >> <column name="TypeId" /> >> <column name="EntityId" /> >> </any> >> </class> >> >> </hibernate-mapping> >> >> When I'm trying to execute an HQL query with filter on property >> "Association", I'm getting an error described here >> >> http://groups.google.com/group/nhusers/browse_thread/thread/17122049e8207ac8 >> If I fix this bug in sources of NH, I'll get a more interesting error. >> It seems, than NH does not expand property Association to two table >> columns correctly and could not extract entity type and entity id from >> parameter. >> >> Here is the query: "delete from " + typeof(IssueClass).Name + " where >> Association = ?" >> >> Questions: >> 1. Does NHibernate support polymorphic HQL query of that kind? >> 2. Does NHibernate support polymorphic HQL query of that kind if I use >> custom meta-type in <any> mapping? >> 3. If NH doesn't support this feature then is there any workaround? >> >> I really need to execute queries with such polymorphic relations >> (actually update's, not only delete's). >> >> Query text and actual test case are following: >> ----------------------------------------------------------------------- >> [TestFixture] >> public class TestCase >> { >> private Configuration configuration; >> private ISessionFactory sessionFactory; >> private ISession currentSession; >> >> [SetUp] >> public void SetUp() >> { >> configuration = new Configuration(); >> sessionFactory = >> configuration.Configure().BuildSessionFactory(); >> >> CreateDataScheme(); >> >> currentSession = sessionFactory.OpenSession(); >> } >> >> [TearDown] >> public void TearDown() >> { >> if (currentSession != null) >> { >> currentSession.Dispose(); >> currentSession = null; >> } >> } >> >> [Test] >> public void HqlTest() >> { >> ClassA a = new ClassA(); >> ClassB b = new ClassB(); >> >> currentSession.Save(a); >> currentSession.Save(b); >> >> IssueClass c1 = new IssueClass(); >> c1.Association = a; >> currentSession.Save(c1); >> >> IssueClass c2 = new IssueClass(); >> c2.Association = b; >> currentSession.Save(c2); >> >> currentSession.Flush(); >> >> currentSession = sessionFactory.OpenSession(); >> >> string queryString = "delete from " + >> typeof(IssueClass).Name + " >> where Association = ?"; >> IQuery query = currentSession.CreateQuery(queryString); >> query.SetEntity(0, a); >> >> Assert.AreEqual(1, query.ExecuteUpdate()); >> } >> >> public void CreateDataScheme() >> { >> var export = new SchemaExport(configuration); >> export.Create(false, true); >> } >> } >> ---------------------------------------------------------------------- >> >> -- >> You received this message because you are subscribed to the Google Groups >> "nhusers" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<nhusers%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/nhusers?hl=en. >> >> > > > -- > Fabio Maulo > > -- Fabio Maulo -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
