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.