使用Anorm在PostgreSQL json字段中插入Json对象
发布时间:2020-12-13 16:09:53 所属栏目:百科 来源:网络整理
导读:如何使用Anorm将JsObject传递到PostgreSQL 9.3数据库中的json数据类型字段而不必将其转换为字符串? 给定PostgreSQL 9.3表,例如: create table profiles( id serial primary key,profile json null); 使用Play 2.2,此测试成功: package helpersimport anor
如何使用Anorm将JsObject传递到PostgreSQL 9.3数据库中的json数据类型字段而不必将其转换为字符串?
给定PostgreSQL 9.3表,例如: create table profiles ( id serial primary key,profile json null ); 使用Play 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. 为了将JsObject作为json数据类型直接传递,如何使用Anorm避免这种情况? 解决方法
对于Play 2.4及更高版本,请使用anorm.Object(value:org.postgresql.util.PGobject)类而不是直接使用值:
val pgObject = new org.postgresql.util.PGobject(); pgObject.setType("json"); pgObject.setValue(profile); val sql = SQL("insert into profiles (profile) values ({profile})") .on("profile" -> anorm.Object(pgObject)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |