繁体   English   中英

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

[英]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)
;

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM