You can use BigDecimal but the problem here is that BigDecimal type you are getting from Anorm is java.math.BigDecimal while in your case classes you are actually using scala.math.BigDecimal.
To make it work you can either:
1) Define your case classes with java.math.BigDecimal and use this type in your application.
OR
2) Convert between these two in your parser and keep the scala types in your application. This seems to be a better solution. We have used this approach in production. Example:
case class ABC (id: Int, price: BigDecimal, decimalPlaces: Int)
You parser will look like:
val simple = {
get[Int]("id") ~ get[java.math.BigDecimal]("price") ~ get[Int]("decimalPlaces") map {
case id ~ price ~ decimalPlaces => ABC(id, BigDecimal(price), decimalPlaces)
}
And when you need to convert from Scala BigDecimal back to Java BigDecimal (for insert, update etc):
val priceAsJavaBD = priceAsScalaBD.bigDecimal //Returns java.math.BigDecimal
Also, you can have a field (e.g. decimalPlaces) to explicitly define how many decimal places you want when showing this price.