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

标签 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)
;

当我尝试将 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/

相关文章:

java - 如何获得玩!框架的Javadocs?

java - Kotlin如何使用JDK 1.8调用Java 11代码?

java - 从每一行中删除 ","并放入 java 中的 arraylist

php - Android MySQL 服务器请求类中 Asynctask 的问题

mysql - 如何在单行中计数?

dependencies - playframework 应用程序的 powermock 依赖项

java - 将 MySql 添加到 playframework 2.2.1

java - 使用Gson解析一个巨大的JSON对象,其中包含数组和对象?

java - 清除 tomcat 7 中 web 应用程序的所有 session

mysql - 如何使用 MySql 和 Entity Framework 4.2 Code First 进行全文搜索?