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

时间:2016-03-01 13:46:04

标签: java mysql playframework ebean playframework-2.4

我使用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)
;

当我尝试将演变应用到服务器时,我收到以下错误:

  

错误代码:1064。您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在第5行使用“(6)not null,date_friends datetime(6)not null”附近的正确语法

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

1 个答案:

答案 0 :(得分:3)

这与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;