玩转义 table 名字的进化

Play evolution escaping table names

我有 Play!Framework 运行 jdbcPostgresql 作为数据库。我想为开发使用启用进化。

Play 似乎不会自动转义 table 名称。例如,当创建一个名为 user 的 table 时,我似乎无法自动创建一个 table,因为 user 是 SQL 中的保留字。

Play 产生这样的进化:

# --- Rev:1,Ups - 4fb5e22
create table user (
id                        bigserial not null,
name                      varchar(255),
constraint pk_user primary key (id));

有什么方法可以自动转义 table 名称吗?

谢谢

我不确定 'automatically' 是什么意思。 Evolutions 基本上是提交给数据库的 sql 命令,因此 postgresql 转义已识别的名称也应该是您的 evolutions 中的有效语法。我不是 postgresql 专家,但我相信双引号会满足您的需求:

create table "user" (
  id bigserial not null,
  name varchar(255),
constraint pk_user primary key (id));

我不确定是否可行。可以尝试使用一些常用的转义

喜欢休眠:

@Table(name="`user`")

喜欢 JPA2:

@Table(name="\"user\"")

对于我自己——我从不使用保留字来命名。你总是会因此而堕落,永远。所以只需使用不同的 table 名称,即使您不想更改 class 名称本身,也可以使用不同的 table 名称对其进行注释:

@Table(name="user_table")