在playgresql数据库中使用anorm在play框架中保留对象2

bdicta 发布于 5 天前 anorm 最后更新 5 天前 14 浏览

我试图使用anorm库将对象保存到play2 webapp中的postgresql Db中。 表格“地址”的Create语句就是这样的:

create table address (
    addressId               bigserial not null,
    addressName             varchar(255) not null,
    street                  varchar(255) not null,
    number                  varchar(15) not null,
    ZIP                     varchar(15) not null,
    region                  varchar(63) not null,
    country                 varchar(63) not null,
    constraint pk_address primary key (addressId)
);
我的Scala / Anorm代码如下所示:
private def create(address: Address, recursive : Boolean): Long = {
    DB.withConnection { implicit connection =>
        SQL( """
             insert into {table_name} (addressName, street, number, ZIP, region, country)
             values ({name},{street},{number},{ZIP},{region},{country})
            """).on(
            "table_name" -> TABLE_NAME,
            "name" -> address.name,
            "street" -> address.street,
            "number" -> address.number,
            "ZIP" -> address.ZIP,
            "region" -> address.region,
            "country"-> address.country
        ).executeInsertOption[Long].get
    }
}
很明显,TABLE_NAME是一个val,它包含字符串“Address” 问题是,当我尝试执行一个适当的地址实例,如:
Address("Antonio","vacchi","12","48012","RA","Italia")
我得到这个例外:
[PSQLException: ERROR: syntax error at or near "$1" Posizione: 13] 
'Posizione'是Position的意大利词(不知道为什么我在意大利语中得到错误:)
已邀请:

hquae

赞同来自:

使用{table_name}语法的插值将导致SQL包含定位参数。在CREATE语句中,这是不受支持的。因此,在这种情况下,您必须写出Address,而不是在on参数中传递它。