2015-02-12 2 views
0

У меня этот странный вопрос с поддержкой многозначного Anorm, мой запрос ничего не возвращает, когда я использую Seq как написано в documentation .. Вот мой запрос:Anorm поддержка многозначная не работает

контроллер

def checkStock(data: Recap): Boolean = DB.withConnection { implicit conn => 
    var so_id_list: Set[String] = Set() 
    for(ls <- data.recap_items){ 
     for(rs <- ls.invoice_items){ 
      so_id_list = so_id_list ++ Set(rs.id.toString) 
     } 
    } 
    breakable{ 
     play.api.Logger.info(so_id_list.toSeq.toString) 
     //return ArrayBuffer(4, 5) 
     val result = Sales_Order.getSO_detailbyIDlist(so_id_list.toSeq) 
     play.api.Logger.info(result.toString) 
     //return List() 
    } 
} 

Модель

def getSO_detailbyIDlist(so_id_list: Seq[String]):List[SO_detail] = DB.withConnection{ implicit c => 
    SQL("""SELECT detailso.sur_key, detailso.so_id AS so_id, detailso.product_id, detailso.qty, product.name, detailso.unit_name, detailso.unit_multiplier, detailso.price, detailso.discount, detailso.contract, COALESCE(rs.left_qty, 0) AS left_qty 
     FROM detailso 
     LEFT JOIN product ON detailso.product_id = product.id 
     LEFT JOIN (SELECT Product.id, COALESCE(SUM(StockCard.left_qty), 0) as left_qty 
        FROM Warehouse_Product 
        LEFT JOIN Product ON Product.id = Warehouse_Product.product_id 
        LEFT JOIN Warehouse ON Warehouse.id = Warehouse_Product.warehouse_id 
        LEFT JOIN StockCard ON Stockcard.warehouse_product_id = Warehouse_Product.id 
        WHERE Warehouse.id = '110' AND StockCard.status = 1 
        GROUP BY id) rs ON rs.id = product.id 
     WHERE detailso.so_id IN ({so_id_list}) 
     GROUP BY detailso.sur_key""").on('so_id_list -> so_id_list).as(SO_detailParser *) 
} 

Если я изменю запрос IN в руководство IN (4,5), он возвращается как и ожидалось. Любая идея, почему моя многозначность не работает?

+0

Вам необходимо уточнить версию Anorm: значение multi было выпущено в 2.3. – cchantep

+0

Вы правы, я использую Play 2.2 .. Спасибо .. Знаете ли вы обходное решение для достижения того же? –

+0

Anorm доступен как автономная зависимость. Ничто не мешает использовать 2.3 (даже с play2.2). – cchantep

ответ

2

Вы можете обновить Anorm до 2.3, используя эту функцию, удалив из вашего проекта SBT константу константы anorm, предоставленную Play, и добавив полностью/автономную зависимость.

libraryDependencies ++= Seq("com.typesafe.play" %% "anorm" % "2.3.7") 
//2.3.7 is just an example, you can change it to any other version 
+0

Быстрый вопрос здесь, после перехода на 2.3.7. Я получил сообщение об ошибке «Нет неявного представления, доступного из Any => anorm.ParameterValue.' при вставке последнего идентификатора, возвращаемого' executeInsert() '. Есть идеи ? –

+1

Не быстрый вопрос, он заслуживает собственного вопроса для деталей. См. Раздел Анормация по адресу http://www.playframework.com/documentation/2.3.x/Migration23 (ваш тип параметра должен быть явным/без стирания, для безопасного преобразования SQL). – cchantep

Смежные вопросы