2016-04-05 15 views
1

私はGrailsを学びたいと思っています。私は奇妙な問題に直面しました。私はアプリケーションを作成し、データベースとしてPostgreSQLをセットアップしました。ここに私のapplication.ymlGrailsがデフォルトでnot-nullカラムを生成するのはなぜですか?

dataSource: 
    pooled: true 
    jmxExport: true 
    driverClassName: org.postgresql.Driver 
    username: postgres 
    password: XxXxXxXxX 

environments: 
    development: 
     dataSource: 
      dbCreate: update 
      url: jdbc:postgresql://localhost:5432/datarh 
    test: 
     dataSource: 
      dbCreate: update 
      url: jdbc:postgresql://localhost:5432/datarh 
    production: 
     dataSource: 
      dbCreate: update 
      url: jdbc:postgresql://localhost:5432/datarh 
      properties: <ommited> 

はその後、私は2つのドメインクラスに作成されます。

class Candidate { 

    String name 
    String linkedin 
    String email 
    String phone 
    String personalMessage 
    String pathCV 
    static hasMany = [skills: Skill] 

    static constraints = { 

    } 
} 

class Skill { 

    String skill 
    String description 

    static hasMany = [candidates: Candidate] 
    static belongsTo = Candidate 

    static constraints = { 

    } 
} 

を[OK]を、今私は自分のアプリケーションを起動して、私は私の作成したテーブルをチェックしました。私の驚きのために、私はこの得た:あなたが見ることができるように

CREATE TABLE candidate 
(
    id bigint NOT NULL, 
    version bigint NOT NULL, 
    email character varying(255) NOT NULL, 
    linkedin character varying(255) NOT NULL, 
    name character varying(255) NOT NULL, 
    pathcv character varying(255) NOT NULL, 
    personal_message character varying(255) NOT NULL, 
    phone character varying(255) NOT NULL, 
    CONSTRAINT candidate_pkey PRIMARY KEY (id) 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE candidate 
    OWNER TO postgres; 

CREATE TABLE candidate_skills 
(
    candidate_id bigint NOT NULL, 
    skill_id bigint NOT NULL, 
    CONSTRAINT candidate_skills_pkey PRIMARY KEY (candidate_id, skill_id), 
    CONSTRAINT fk_941r0fvlnkcvq9r7jqn5awce4 FOREIGN KEY (candidate_id) 
     REFERENCES candidate (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT fk_t537lxgp89abb42uf1robp1xp FOREIGN KEY (skill_id) 
     REFERENCES skill (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE candidate_skills 
    OWNER TO postgres; 

CREATE TABLE skill 
(
    id bigint NOT NULL, 
    version bigint NOT NULL, 
    description character varying(255) NOT NULL, 
    skill character varying(255) NOT NULL, 
    CONSTRAINT skill_pkey PRIMARY KEY (id) 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE skill 
    OWNER TO postgres; 

、すべてのテーブルは、NOT-NULLで作成されました。これをどうすれば解決できますか?

マイ的環境:

  • のPostgresSQL 9.4
  • Grailsのバージョン:3.1.4
  • Groovyのバージョン:2.4.6
  • JVMのバージョン:1.8.0_77

答えて

2

あなたの永続プロパティはデフォルトでnullになりません。

class Skill { 

    String skill 
    String description 

    static hasMany = [candidates: Candidate] 
    static belongsTo = Candidate 

    static constraints = { 
     description nullable: true 
     skill nullable: true 

     // ... 

    } 
} 
+0

すべてをデフォルトでnullにしたい場合は、グローバル制約として設定することもできます。構文と詳細については、http://grails.github.io/grails-doc/3.1.4/guide/validation.html#sharingConstraintsを参照してください。 –

+0

申し訳ありません私は、この振る舞いが逆転する他のフレームワークで使用されています(デフォルトでは 'nullable = true')。 –

関連する問題