Association.class = ...... 2010/2/18 Sergey Ishchenko <s.a.ishche...@gmail.com>
> 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 nhus...@googlegroups.com. > To unsubscribe from this group, send email to > nhusers+unsubscr...@googlegroups.com<nhusers%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > > -- Fabio Maulo -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to nhus...@googlegroups.com. To unsubscribe from this group, send email to nhusers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.