2016-03-01 8 views
1

Я начал проект с Play Framework 2.4, включая Ebean ORM и используя MySql Server 5.5.Play Framework evolutions с использованием неподдерживаемого синтаксиса для MySQL

Как описано в документах Docs, возможно создать базу данных из объектов, и она работает должным образом. Но когда я попытался вставить временную метку, у меня возникла проблема, потому что в 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; 

И это MySQL код Play создает для меня:

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 для правильного синтаксиса использовать вблизи «(6) не равно нулю, date_friends DateTime (6) не нулевой)» в строке 5

Есть ли способ, чтобы сказать Играть в генерировать файлы SQL Evolution только с datetime(), а не с datetime(6)?

ответ

3

Это больше связано с Ebean, чем с 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;