6
如何將帶有Anorm的PostgreSQL 9.3數據庫中的JsObject
轉換爲json
數據類型字段而不必將其轉換爲字符串?使用Anorm在PostgreSQL json字段中插入Json對象
給定的PostgreSQL 9.3表,例如:
create table profiles
(
id serial primary key,
profile json null
);
隨着播放2.2,這個測試成功:
package helpers
import anorm._
import org.specs2.mutable._
import org.specs2.runner._
import org.junit.runner._
import play.api.db.DB
import play.api.libs.json._
import play.api.test._
@RunWith(classOf[JUnitRunner])
class AnormTest extends Specification {
"AnormTest" should {
"insert a JSON object" in new WithApplication {
val profile = Json.obj("language" -> "en")
val sql = SQL("insert into profiles (profile) values (CAST({profile} AS json))")
.on("profile" -> profile.toString)
DB.withConnection { implicit c => sql.execute() }
}
}
}
但隨着這些線路變化:
val sql = SQL("insert into profiles (profile) values ({profile})")
.on("profile" -> profile)
它產生這種錯誤:
org.postgresql.util.PSQLException:
Can't infer the SQL type to use for an instance of play.api.libs.json.JsObject.
Use setObject() with an explicit Types value to specify the type to use.
由於與ANORM我們通常通過適當的數據類型而不是文本(例如,一個UUID
對象uuid
數據類型的列),這不是最佳的具有與JsObject
轉換爲字符串,並將它轉換回json
數據類型在SQL語句中。
有關此問題及其解決方法的示例,請參閱Using PostgreSQL's native JSON support in Play Framework 2.1-RC1。
如何避免使用Anorm以直接將JsObject
作爲json
數據類型?