Play Framework 使用 MySQL 不受支持的语法演变

Play Framework evolutions using unsupported syntax for MySQL

我用 Play Framework 2.4 开始了一个项目,包括 Ebean ORM 并使用 MySql Server 5.5。

正如 Play 文档所描述的,可以从对象生成数据库并且它按预期工作。但是,当我尝试插入时间戳时,我遇到了问题,因为 Play 使用的是我的服务器不支持的较新的 mysql 语法。

这是我的模型:

@ManyToOne
@Column(name = "user_send_id")
private User userSendReq;

@ManyToOne
@Column(name = "user_request_id")
private User userGetReq;

@CreatedTimestamp
@Column(name = "date_request")
private Timestamp whenRequest;

@UpdatedTimestamp
@Column(name = "date_friends")
private Timestamp whenFriends;

private boolean request;

这是 Play 为我生成的 MySQL 代码:

create table friends (
user_send_req_id          bigint,
user_get_req_id           bigint,
request                   tinyint(1) default 0,
date_request              datetime(6) not null,
date_friends              datetime(6) not null)
;

当我尝试将进化应用到服务器时,出现以下错误:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) not null, date_friends datetime(6) not null)' at line 5

有没有办法告诉 Play 仅使用 datetime() 而不是使用 datetime(6) 生成 SQL Evolution 文件?

这与 Ebean 的关系比与 Play 的关系更大,因为 play 使用 Ebean 来生成 DDL。要解决此问题,您可以在映射模型时显式设置 SQL 类型。只需将 columnDefinition 参数用于 @Column 注释:

@CreatedTimestamp
@Column(name = "date_request", columnDefinition = "datetime")
private Timestamp whenRequest;

@UpdatedTimestamp
@Column(name = "date_friends", columnDefinition = "datetime")
private Timestamp whenFriends;