私はまだPlayFrameworkを使ったEbeanORMについて学んでいます。Play!Frameworkによって生成された予期しない進化スクリプトに問題があります。Play!Framework2.1.1とJDK1.7 update564ビットを使用しています。申し訳ありませんが、この質問の長いコードスニペットについてです。
次のような2つのEbeanモデルがあります。
Course.java
package models;
import play.data.validation.Constraints;
import play.db.ebean.Model;
import javax.persistence.*;
@Entity
@Table(name = "castillo_courses")
public class Course extends Model {
public enum CourseType {
COMPULSORY(1), BASIC_INTEREST(2), ADVANCED_INTEREST(3), THESIS(4);
private int value;
CourseType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
@Id
private String code;
@Constraints.Required
private String course_name;
@Constraints.Required
private String credits;
@Constraints.Required
private CourseType course_type;
// Ebean finder and Other getter and setter method
......
}
CourseInterest.java
package models;
import play.data.validation.Constraints;
import play.db.ebean.Model;
import javax.persistence.*;
@Entity
@Table(name = "castillo_course_interest")
public class CourseInterest extends Model {
public enum InterestType {
ARCHITECTURAL_INFRA(1), SOFTWARE_TECH(2), INFORMATION_PROCESSING(3), ENTERPRISE_SYSTEM(4), COMP_INTELLIGENCE(5);
private int value;
InterestType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
@Id
@ManyToOne
@JoinColumn(name = "course_code", referencedColumnName = "code")
private Course course;
@Id
@Constraints.Required
private InterestType interest_type;
// Ebean finder and Other getter and setter method
......
}
これは、上記のモデルから生成された進化スクリプトです。
# --- Created by Ebean DDL
# To stop Ebean DDL generation, remove this comment and start using Evolutions
# --- !Ups
create table castillo_courses (
code varchar(255) not null,
course_name varchar(255),
credits varchar(255),
course_type integer,
constraint ck_castillo_courses_course_type check (course_type in (0,1,2,3)),
constraint pk_castillo_courses primary key (code))
;
create table castillo_course_interest (
course_name varchar(255),
credits varchar(255),
course_type integer,
interest_type integer not null,
constraint ck_castillo_course_interest_course_type check (course_type in (0,1,2,3)),
constraint ck_castillo_course_interest_interest_type check (interest_type in (0,1,2,3,4)))
;
create sequence castillo_courses_seq;
create sequence castillo_course_interest_seq;
# ..... !DOWNS code not shown
生成された進化スクリプトで私が期待したのは次のとおりです。
castillo_courses
CREATE TABLE
スクリプトでは、制約ck_castillo_courses_course_type
は、チェックインするのではなく、属性で(1,2,3,4)
定義されたとおりにチェックインする必要があります。列挙型の値を使用して、evolutionがこのチェックを生成したと思われます。CourseType.value
(0,1,2,3)
ORDINAL
castillo_course_interest
CREATE TABLE
スクリプトでは、を除くすべてのフィールドを再度定義しcastillo_courses
ますcode
。スクリプトは、アノテーションで定義された列を定義するだけだと思います。ここに別の問題があります。モデルで定義された2つを定義したため、主キー制約を生成するスクリプトもありません。course_code
@JoinColumn
@Id
この問題について説明したり、アドバイスを与えたり、助けてくれたりする人に感謝します。:)
よろしくお願いします。