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.
