我使用 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)
;
当我尝试将 evolution 应用于服务器时,出现以下错误:
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 类型。只需为 @Column
注释使用 columnDefinition
参数:
@CreatedTimestamp
@Column(name = "date_request", columnDefinition = "datetime")
private Timestamp whenRequest;
@UpdatedTimestamp
@Column(name = "date_friends", columnDefinition = "datetime")
private Timestamp whenFriends;
关于java - Play Framework 使用不受支持的 MySQL 语法演变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35724607/