3

(play 2.0のサンプルコードに基づいて)単純なコントローラー/モデルを作成しようとしましたが、DBの進化に関するメッセージが表示されました。

Database 'default' needs evolution!

An SQL script will be run on your database - "Apply this script now"

1 # --- Rev:1,Ups - fbdc2fd
2 create table group (
3 id                        bigint not null,
4 name                      varchar(255),
5 description               varchar(255),
6 due_date                  timestamp,
7 constraint pk_group primary key (id))
8 ;
9 
10 create sequence group_seq;

しかし、ボタンをクリックすると、以下のエラーメッセージが表示されます。

Database 'default' is in inconsistent state!

An evolution has not been applied properly. Please check the problem and resolve it manually before making it as resolved 

We got the following error: SQLステートメントに文法エラーがあります "CREATE TABLE GROUP[*] ( ID BIGINT NOT NULL, NAME VARCHAR(255), DESCRIPTION VARCHAR(255), DUE_DATE TIMESTAMP, CONSTRAINT PK_GROUP PRIMARY KEY (ID)) "; 期待されるステートメント "identifier" Syntax error in SQL statement "CREATE TABLE GROUP[*] ( ID BIGINT NOT NULL, NAME VARCHAR(255), DESCRIPTION VARCHAR(255), DUE_DATE TIMESTAMP, CONSTRAINT PK_GROUP PRIMARY KEY (ID)) "; expected "identifier"; SQL statement: create table group ( id bigint not null, name varchar(255), description varchar(255), due_date timestamp, constraint pk_group primary key (id)) [42001-158] [ERROR:42001, SQLSTATE:42001], while trying to run this SQL script:

 1# --- Rev:1,Ups - fbdc2fd
2
3 create table group (
4 id                        bigint not null,
5 name                      varchar(255),
6 description               varchar(255),
7 due_date                  timestamp,
8 constraint pk_group primary key (id))
9 ;
10
11 create sequence group_seq;

私の構成ファイル

#DB setting
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"

# Ebean configuration
ebean.default="models.*"

私のコントローラー

public class Application extends Controller {

    /**
     * 
     * @return
     */
  public static Result index() {

      Group g = new Group("New group Test","This is a test !");
      g.save();

    return ok(index.render("Render page"));
  }

}

そして最後に私のモデル:

@Entity
public class Group extends Model {

    public static Finder<Long,Group> find = new Finder (Long.class, Group.class);

    @Id
    public Long id;

    @Required
    public String name;

    @Required
    public String description;

    @DateTime(pattern = "MM/dd/yy")
    public Date dueDate;


    /**
     *  ToString method
     */
    public String toString() {
        return "Group(" + id + ") in project " + name;
        }


    /**
     *  Constructor
     * @param name
     * @param description
     */
    public Group(String name, String description){
            this.name=name;
            this.description=description;
    }

}

誰かが同じ問題に遭遇しましたか?ありがとうございました !

4

2 に答える 2

5

SQLキーワードであるため、テーブル(グループ)の名前が問題である可能性があります。テーブル名(「グループ」)を引用するか、別のテーブル名を使用するとどうなるかをテストしてください。

于 2012-06-09T11:01:49.713 に答える
1

グループはキーワードなので、モデルの他の名前を見つけてくださいGroup。そうすれば機能します。

ところで、Finderも修正します。

public static Finder<Long,MyGroup> find = new Finder<Long,MyGroup> (Long.class, MyGroup.class);

キーワードとの競合を避けるために他のテーブルの名前を強制することもできますが、私は個人的にモデル名を変更し、テーブルとモデルを使用します。

@Entity
@Table(name = "group_table")
public class Group extends Model {
  ...
}
于 2012-06-09T11:11:23.290 に答える