Эволюция базы данных в Play Framework 2.4 не работает?

В шаблоне play-java-intro выдается PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement, потому что таблица PERSON не найдена.

Исключение:

- org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Table "PERSON" not found; SQL statement:

Это класс модели Person по умолчанию из шаблона play-intro-java (Play Framework 2.4):

package models;

import javax.persistence.*;

@Entity
public class Person {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public int id;

    public String name;
}

Play должен сначала запустить Database Evolution, поэтому таблица PERSON будет создана первой. Добавлена ​​строка libraryDependencies += evolutions в build.sbt по инструкции, но безрезультатно. В Play 2.3.9 такой проблемы не было.

Play 2.4 использует JPA для модели/постоянства, тогда как Play 2.3 и предыдущие версии используют Ebean ORM.


person rilut    schedule 05.06.2015    source источник
comment
Вы автоматически применяете эволюции или делаете это вручную, выбирая сценарий применения?   -  person Bhavya Latha Bandaru    schedule 02.07.2015


Ответы (1)


я думаю, вам нужно расширить класс Person до Model, например:

import com.avaje.ebean.Model;

@Entity
public class Person extends Model {

Вот пример с изменениями для версии 2.4.x

import com.avaje.ebean.Model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import play.data.format.Formats;
import play.data.validation.Constraints;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.Date;

@Entity
public class CAE extends Model {

    @Id
    public String codigo;
    public String designacaoPT;
    @Column(length=2000)
    public String notaPT;
    @JsonIgnore
    public boolean enabled;
    @Constraints.Required
    @Formats.DateTime(pattern="dd-MM-yyyyThh:mm:ss")
    @JsonIgnore
    private Date createdDate;
    @JsonIgnore
    public Long createdBy;
    @Constraints.Required
    @Formats.DateTime(pattern="dd-MM-yyyyThh:mm:ss")
    @JsonIgnore
    public Date updatedDate;
    @JsonIgnore
    public Long updatedBy;

    public CAE() {
        this.createdDate = new Date();
        this.updatedDate = new Date();
        this.createdBy = new Long(0);
        this.updatedBy = new Long(0);
        this.enabled = true;
    }

    public Date getCreatedDate() {
        return createdDate;
    }

    public static final Finder<String, CAE> find = new Finder<>(CAE.class);

}
person martinscmb    schedule 28.07.2015