2015-03-07 1 views
0

Я новичок в PlayFramework и Scala. Я использую PlayFrameworkanorm для подключения к базе данных и использования встроенных h2 database. Когда я вставляю значения в таблицу, вставка выполняется успешно. Но когда я извлечение данных из базы данных он генерирует и ошибок, как показано ниже:PlayFramework 2: выборка данных из базы данных h2, десятичные числа не сопоставляются с десятичной точкой Scala

[RuntimeException: Left(TypeDoesNotMatch(Cannot convert 25.50: class java.math.BigDecimal to Float for column ColumnName(USER_DETAIL.AGE,Some(AGE))))] 

После мой POJO:

case class UserDetail(
val id: Int, 
val name: String, 
val age: Float 
) 

Ниже мой контроллер:

def getUserDetail = Action{ 
val userDetail = UserDetail(13, "James", 25.9F); 
var sql: SqlQuery = SQL("SELECT * FROM USER_DETAIL"); 
def users: List[UserDetail] = DB.withConnection { implicit connection => 
    sql().map(row => UserDetail(row[Int]("id"), row[String]("name"), row[Float]("age"))).toList 
} 
println(">>>>>>>>>>>>>>>>>>>>: "+users) 
Ok(Json.toJson(users)); 
} 

Ниже мой стол Структура:

create table User_Detail(
id int NOT NULL PRIMARY KEY, 
name varchar(45), 
age decimal(20, 2) 
) 

Я также пытаюсь заменить decimal типа с double в таблице, но она снова генерировать ту же ошибку, как выше

[RuntimeException: Left(TypeDoesNotMatch(Cannot convert 25.50: class java.lang.Double to Float for column ColumnName(USER_DETAIL.AGE,Some(AGE)))) 
+0

Вы пробовали использовать h2-типы Real или Float4 в своем столе, а не Decimal (20,2) или Double? согласно H2 docs, который сопоставляется с java.lang.Float, который должен преобразовать в scala.Float без проблем. http://www.h2database.com/html/datatypes.html#real_type –

+0

@SteveWaldman благодарит за ваш комментарий. нет, я не пытаюсь это сделать, но когда я попытаюсь, я буду обновлять комментарии. –

+0

Какую версию анорма вы используете? Последняя версия предоставляет больше числовых преобразований. – cchantep

ответ

1

Как насчет

case class UserDetail(
val id: Int, 
val name: String, 
val age: Double 
) 

редактировать:

, а затем использовать row[Double]("age") когда прочитав его

+0

спасибо за ваш ответ. Это работа для меня. Но почему это не автоприведение в 'FLOAT'. –

+0

Преобразование из double/numeric в float приведет к потере точности. Выполнение этого автоматически/неявно было бы опасным. – cchantep

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