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.

Reply via email to