I thought the query substitution would substitute 1 for the boolean true. It should not change the string "true" to anything - right?
On Aug 31, 12:17 pm, cliff vaughn <[email protected]> wrote: > I think there are 2 separate issues. The query substitution should > explain the first where he was using the value "true" and it was being > turned into 1. The second issue is that NH seems to be looking at the > value and deciding to quote it or not based on its type instead of the > type of the column. > > On Tue, Aug 31, 2010 at 12:07 PM, Diego Mijelshon > > > > > > <[email protected]> wrote: > > That does 4 specific conversions in HQL queries. > > It doesn't convert arbitrary strings into numbers in any query method. > > > Diego > > > On Tue, Aug 31, 2010 at 13:04, cliff vaughn <[email protected]> > > wrote: > > >> sure it will if you have the default: > > >> <property name="query.substitutions"> > >> true 1, false 0, yes 'Y', no 'N' > >> </property> > > >> On Tue, Aug 31, 2010 at 12:00 PM, Diego Mijelshon > >> <[email protected]> wrote: > >> > Query substitutions won't turn strings into numers. > >> > There's something else going on. > > >> > Diego > > >> > On Tue, Aug 31, 2010 at 12:58, cliff vaughn <[email protected]> > >> > wrote: > > >> >> have you seen my last message. Look at hibernate.cfg.xml and the > >> >> query.substitutions element. > > >> >> On Tue, Aug 31, 2010 at 11:49 AM, jcomet <[email protected]> > >> >> wrote: > >> >> > It isn't just booleans, either: > > >> >> > IList<Employee> emps = _EmployeeDAO.GetSession() > >> >> > .CreateCriteria<Employee>() > >> >> > .Add(Restrictions.Eq("FirstName","23.56")) > >> >> > .List<Employee>(); > > >> >> > yields > > >> >> > SELECT this_.ID as ID10_0_, > >> >> > this_.LastName as LastName10_0_, > >> >> > this_.FirstName as FirstName10_0_, > >> >> > FROM Employee this_ > >> >> > WHERE this_.FirstName = 23.56 /* @p0 */ > > >> >> > yikes! > > >> >> > On Aug 31, 11:41 am, jcomet <[email protected]> wrote: > >> >> >> I have created some new tests using NH 3, and I consistently get the > >> >> >> same behavior. When adding a restriction to a string property, NH > >> >> >> converts the string to a bit/int if it can. For example, this > >> >> >> query: > > >> >> >> IList<Employee> emps = _EmployeeDAO.GetSession() > >> >> >> .CreateCriteria<Employee>() > >> >> >> .Add(Restrictions.Eq("FirstName","true")) > >> >> >> .List<Employee>(); > > >> >> >> Results in this: > > >> >> >> SELECT this_.ID as ID10_0_, > >> >> >> this_.LastName as LastName10_0_, > >> >> >> this_.FirstName as FirstName10_0_, > >> >> >> FROM Employee this_ > >> >> >> WHERE this_.FirstName = 1 /* @p0 */ > > >> >> >> On Aug 31, 11:30 am, jcomet <[email protected]> wrote: > > >> >> >> > I get the same behavior in NH 3. > > >> >> >> > On Aug 31, 11:06 am, Diego Mijelshon <[email protected]> > >> >> >> > wrote: > > >> >> >> > > I couldn't reproduce that in NH 3. Can you check with it? > > >> >> >> > > Diego > > >> >> >> > > On Tue, Aug 31, 2010 at 11:45, jcomet <[email protected]> > >> >> >> > > wrote: > >> >> >> > > > When add a restriction on a particular string property with a > >> >> >> > > > value > >> >> >> > > > of "true" or "false", NH (2.1.2.4000) changes it to a bit > >> >> >> > > > value. > >> >> >> > > > See > >> >> >> > > > example class, hbm, query and resulting SQL. Note in the last > >> >> >> > > > snip, > >> >> >> > > > the line "WHERE this_.SettingValue = 1" should read "WHERE > >> >> >> > > > this_.SettingValue = 'true'. If I change the restriction > >> >> >> > > > from > >> >> >> > > > "true" > >> >> >> > > > to "poop", the NH correctly surrounds poop with quotes. My > >> >> >> > > > conclusion > >> >> >> > > > is that NH tries to convert the string value to boolean, and > >> >> >> > > > if > >> >> >> > > > it > >> >> >> > > > can, it does so using the value substitution from the session > >> >> >> > > > factory > >> >> >> > > > configuration. This is curious, since NH knows that column is > >> >> >> > > > a > >> >> >> > > > string from the mapping, so why would it need to guess? Is > >> >> >> > > > there a > >> >> >> > > > way to inform NH not to do this? > > >> >> >> > > > namespace MYAPP.Core.Domain > >> >> >> > > > { > >> >> >> > > > public class EmployeeSetting > >> >> >> > > > { > >> >> >> > > > public virtual int ID { get; set; } > >> >> >> > > > public virtual string SettingValue { get; set; } > >> >> >> > > > public virtual Employee Employee { get; set; } > >> >> >> > > > public virtual SettingType SettingType { get; set; } > >> >> >> > > > } > >> >> >> > > > } > > >> >> >> > > > <?xml version="1.0" encoding="utf-8" ?> > >> >> >> > > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > >> >> >> > > > assembly="MYAPP.Core" namespace="MYAPP.Core.Domain"> > >> >> >> > > > <class name="MYAPP.Core.Domain.EmployeeSetting,MYAPP.Core" > >> >> >> > > > table="EmployeeSetting"> > >> >> >> > > > <id name="ID" column="ID" type="Int32" unsaved-value="0"> > >> >> >> > > > <generator class="native" /> > >> >> >> > > > </id> > >> >> >> > > > <property name="SettingType" column="SettingType" > >> >> >> > > > type="MYAPP.Core.Domain.SettingType, MYAPP.Core" > >> >> >> > > > not-null="false" > >> >> >> > > > /> > >> >> >> > > > <property name="SettingValue" column="SettingValue" > >> >> >> > > > type="string" > >> >> >> > > > not-null="false" /> > >> >> >> > > > <many-to-one name="Employee" column="EmployeeID" > >> >> >> > > > class="MYAPP.Core.Domain.Employee,MYAPP.Core.Domain"/> > >> >> >> > > > </class> > >> >> >> > > > </hibernate-mapping> > > >> >> >> > > > IList<EmployeeSetting> es = _EmployeeSettingDAO.GetSession() > >> >> >> > > > .CreateCriteria<EmployeeSetting>() > >> >> >> > > > .Add(Restrictions.Eq("SettingValue", "true")) > >> >> >> > > > .Add(Restrictions.Eq("SettingType", > >> >> >> > > > SettingType.ReceiveAlerts)) > >> >> >> > > > .List<EmployeeSetting>(); > > >> >> >> > > > SELECT this_.ID as ID8_0_, > >> >> >> > > > this_.SettingType as SettingID8_0_, > >> >> >> > > > this_.SettingValue as SettingV3_8_0_, > >> >> >> > > > this_.EmployeeID as EmployeeID8_0_ > >> >> >> > > > FROM EmployeeSetting this_ > >> >> >> > > > WHERE this_.SettingValue = 1 /* @p0 */ > >> >> >> > > > and this_.SettingType = 1 /* @p1 */ > > >> >> >> > > > -- > >> >> >> > > > 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.-Hidequotedtext - > > >> >> >> > > - Show quoted text -- Hide quoted text - > > >> >> >> > - Show quoted text -- Hide quoted text - > > >> >> >> - Show quoted text - > > >> >> > -- > >> >> > 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. > > >> >> -- > >> >> thanks > > >> >> cliff > > >> >> -- > >> >> 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. > > >> -- > >> thanks > > >> cliff > > >> -- > >> 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. > > -- > thanks > > cliff- Hide quoted text - > > - Show quoted text - -- 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.
