【问题标题】:Why does GORM/Hibernate convert string parameter to TRUE?为什么 GORM/Hibernate 将字符串参数转换为 TRUE?
【发布时间】:2014-01-20 23:45:31
【问题描述】:

我正在使用 Grails 2.2.3

我正在尝试进行类似产品搜索

域对象映射到旧版 JDE 表并且是:

class JdeProduct {
    String itemNum
    String searchText
    String description
    String transUnitOfMeasure
    String priceUnitOfMeasure
    String saleableProd

    static mapping = {
        autoTimestamp false
        table name: 'F4101', schema: 'PRODDTA'
        version false
        id column: 'IMITM', generator: 'assigned'
        itemNum column: 'IMLITM', sqlType: 'char', length: 25
        searchText column: 'IMSRTX', sqlType: 'char', length: 30
        description column: 'IMDSC1', sqlType: 'char', length: 30
        transUnitOfMeasure column: 'IMUOM1', sqlType: 'char', length: 2
        priceUnitOfMeasure column: 'IMUOM3', sqlType: 'char', length: 2
        saleableProd column: 'IMSHCN', sqlType: 'char', length: 3
    }
}

我的控制器有这个方法来查询数据库:

def searchJde = {
    String likeExpression = '%' + params.searchTerm + '%'
    log.debug("Search for products like ${likeExpression}")
    def products = JdeProduct.findAllItemNumLike(likeExpression)
    log.debug("Products found: ${products.size()}");
    render products as JSON
}

如果 searchTerm 的值为“SL”,即使直接在 Oracle 中执行类似查询确实会返回结果,也不会返回任何结果。

Grails 的日志输出包括:

2014-01-21 09:30:16,294 [http-bio-9080-exec-1] DEBUG controller.ProductController - Search for products like %SL%
2014-01-21 09:30:16,356 [http-bio-9080-exec-1] DEBUG hibernate.SQL - select this_.IMITM as IMITM0_0_, this_.IMDSC1 as IMDSC2_0_0_, this_.IMLITM as IMLITM0_0_, this_.IMUOM3 as IMUOM4_0_0_, this_.IMSHCN as IMSHCN0_0_, this_.IMSRTX as IMSRTX0_0_, this_.IMUOM1 as IMUOM7_0_0_ from PRODDTA.F4101 this_ where this_.IMLITM like ?
Hibernate: select this_.IMITM as IMITM0_0_, this_.IMDSC1 as IMDSC2_0_0_, this_.IMLITM as IMLITM0_0_, this_.IMUOM3 as IMUOM4_0_0_, this_.IMSHCN as IMSHCN0_0_, this_.IMSRTX as IMSRTX0_0_, this_.IMUOM1 as IMUOM7_0_0_ from PRODDTA.F4101 this_ where this_.IMLITM like ?
2014-01-21 09:30:16,356 [http-bio-9080-exec-1] TRACE sql.BasicBinder - binding parameter [1] as [VARCHAR] - true
2014-01-21 09:30:16,731 [http-bio-9080-exec-1] DEBUG controller.ProductController - Products found: 0

问题似乎与:

binding parameter [1] as [VARCHAR] - true

我希望这样说:

binding parameter [1] as [VARCHAR] - %SL%

为什么绑定为真?

【问题讨论】:

    标签: java hibernate grails grails-orm


    【解决方案1】:

    看起来问题是 findAll 中缺少“By”。应该是 findAllByItemNumLike 而不是 findAllItemNumLike

    【讨论】:

      猜你喜欢
      • 2014-05-16
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2017-06-09
      相关资源
      最近更新 更多