使用 MySQL 不受支持的语法播放框架演变
Posted
技术标签:
【中文标题】使用 MySQL 不受支持的语法播放框架演变【英文标题】:Play Framework evolutions using unsupported syntax for MySQL 【发布时间】:2016-03-01 13:46:04 【问题描述】:我使用包含 Ebean ORM 和 mysql Server 5.5 的 Play Framework 2.4 开始了一个项目。
正如 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】:这与 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;
【讨论】:
以上是关于使用 MySQL 不受支持的语法播放框架演变的主要内容,如果未能解决你的问题,请参考以下文章
android : 使用 SoundPool 播放具有短演变周期的短声音