【问题标题】:Problem with mapping int column to a bool property in nhibernate在 nhibernate 中将 int 列映射到 bool 属性的问题
【发布时间】:2011-08-10 09:46:18
【问题描述】:

我有一个 int 列映射为域对象中的布尔类型。直到今天我们注意到在 bool 属性上执行QueryOver 时,一切看起来都很好,生成的实际 SQL 并不符合 SqlServer 的喜好。

queryOver 如下所示:

.Where(Restrictions.On<OrderLine>(ol => _orderLineAlias.Approved).IsLike(true));

SQL 就是,

select * from Orderline where Approved like 'true'

希望你能在这里看到问题,因为列的数据类型是 int,这不会返回任何东西。更改 DB 数据类型或实体类的数据类型不是一种选择。

【问题讨论】:

  • 是时候回去改变你的数据库模型了。你为什么要让它们保持不同
  • 嘿..好主意..但不会工作,因为有很多依赖于此的遗留逻辑。
  • 旧代码反对您的 dB.. 嗯..
  • IsLike 带整数???字符串只有一个like。
  • @Stefan,我正在修改其他人编写的这段代码,并认为它做错了。感谢您指出这一点:)

标签: nhibernate int boolean sql-like


【解决方案1】:

你试过了吗:

    QueryOver<OrderLine>().Where(x => x.Approved == true)

?

【讨论】:

    【解决方案2】:

    您是否尝试过配置文件中以下几行的内容?

    <property name="hibernate.query.substitutions">true 1, false 0</property> 
    

    Link to NH documentation on this topic

    【讨论】:

    • 谢谢,但没有任何区别。是否生成相同的 sql 语法。可能这只适用于 LinqToHibernate。我在这种情况下使用 QueryOver。
    • 我一直将它与 HQL 一起使用(叫我恐龙 :))并且效果很好。作为另一个建议,我将创建另一个属性,它仅充当 boolint 的转换器,其中 int 属性/字段映射到基础列,而 bool 属性由 UI/其他任何东西使用。
    • 还找到了与您的问题相符的内容stackoverflow.com/questions/5063541/…
    • 谢谢 Vijay..我也尝试添加不同的属性,但结果相同。问题是,表达式树是在属性到达其内部之前构建的。因此,如果我们在 QueryOver 中引用 Bool 值,则 sql 仍然是相同的。作为一个临时解决方案,我将有两个属性(int,bool)映射到同一列,并在 QueryOver 中使用 Int 一个。我相信这还没有被报告为 jira 中 QueryOver 的问题。我会努力做到的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2023-02-11
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多