我使用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文件?
答案 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;