I'll also add that if you look at his second example, he actually provided a number as a value, it just didn't get quoted as it should.
On Tue, Aug 31, 2010 at 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.-Hidequoted text - >>> >> >> >>> >> >> > > - 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 > > -- 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.
