it is new in NH3.2 2011/3/26 José F. Romaniello <[email protected]>
> wow! didn't know about <subselect /> ... I learn something new about NH > every day :) > > > 2011/3/26 Fabio Maulo <[email protected]> > >> <class name="Blog" mutable="false"> >> <subselect> >> SELECT Blog.Id, Blog.Author, Blog.Title, Comment.Comment >> FROM Blog INNER JOIN Comment ON Blog.Id = Comment.Blog_id >> WHERE Comment.LanguageId = :blogcomment.languageId >> </subselect> >> <id name="Id"> >> <generator class="assigned" /> >> </id> >> <property name="Author" /> >> <property name="Title" /> >> <property name="Comment" /> >> </class> >> >> <filter-def name="blogcomment"> >> <filter-param name="languageId" type="int"/> >> </filter-def> >> >> >> 2011/3/25 Krzysztof Koźmic <[email protected]> >> >>> So I have a one-to-many tables in database that looks like the following >>> (I'm on NHibernate 3.1): >>> >>> blog >>> id >>> title >>> author >>> >>> comments >>> id >>> blog_Id >>> languageid >>> comment >>> >>> and I want to map it to a *single* class with *single* comment property >>> that maps to text column in comments table for current language. >>> >>> Basically the idea is identical to one ayende had few years back: >>> http://ayende.com/Blog/archive/2006/12/26/localizingnhibernatecontextualparameters.aspx >>> >>> The difference is I try to accomplish this without subselect but using >>> <join /> instead (mostly because the table with translations has more >>> columns than just the text that I may need to include in my joined class). >>> >>> So I created a solution for that and I'm also using filter to pass >>> language id to queries. I also have a noop property in my mapping for the >>> languageid as well as where clause in my mapping that does the filtering. >>> >>> And here's the SQL that NHibernate generates: >>> >>> SELECT this_.Id as Id0_0_, >>> this_.Author as Author0_0_, >>> this_.Title as Title0_0_, >>> this_1_.Comment as Comment1_0_, >>> this_1_.LanguageId as LanguageId1_0_ >>> FROM Blog this_ >>> inner join Comment this_1_ >>> on this_.Id = this_1_.Blog_id >>> WHERE (this_.LanguageId = 2 /* @p0 */) >>> >>> The SQL is invalid as the where should be on this_1_.LanguageId as the >>> value comes from the joined table, not the main one. >>> >>> Also the LanguageId column is mapped as access="noop" which TTBOMK should >>> mean it won't be queried for so I'm surprised to see NHibernate is trying to >>> select it as well. To me it is just wasting bandwith. >>> >>> So I have two questions now. >>> >>> 1. How can I accomplish what I'm trying to get to. >>> 2. Are those issues I mentioned (invalid where clause and ignoring noop >>> access) bugs in NHibernate or am I looking at it from the wrong angle? >>> >>> Reproduction demo app (along with database dump) available here if >>> someone wants to play with it: http://ge.tt/5xoiqYY >>> >>> cheers, >>> Krzysztof >>> >>> -- >>> 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. >>> >>> >> >> >> -- >> 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. >> > > -- > 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. > -- 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.
