我是java play框架和web应用程序编程的新手。一开始我对这个框架感到非常惊讶,但是我一直在努力创建一个单向的manyToOne连接一个星期(!)而且它变得非常令人沮丧。
我将向您展示我的数据库创建语句,以及我的Java模型和我的视图,我真的希望您能够帮助我进一步完成这项工作。我尝试了所有可用的注释(如@JoinColumn等),但没有一个注释组合起作用。也许其中一个错误是事实,我在自己的多表中创建了外键列???我不知道......
这是15分钟前的最后状态,如果没有专家的建议,我没有足够的精力去尝试另一个。
(只是一些基本信息:每个“特定考试”都属于一个“普通考试”。我希望它具有单向性,这意味着,我不需要在普通考试中存储关于这种关系的任何内容,但仅限于特定考试。)
数据库创建:
# --- !Ups
# TABLES - general:
create table generalExam (
id integer not null AUTO_INCREMENT,
name varchar(45) not null,
is_deleted boolean not null default false,
constraint pk_generalexam primary key (id)
)
;
create table specificExam (
id integer not null AUTO_INCREMENT,
generalExam_id integer not null, // THIS IS THE FOREIGN KEY COLUMN!!!!
name varchar(45) not null,
constraint pk_specificexam primary key (id)
)
;
JAVA模特:
package models;
import com.avaje.ebean.Page;
import play.data.validation.Constraints;
import play.db.ebean.Model;
import javax.persistence.*;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Created by ben on 08.08.2015.
*/
@Entity
@Table(name = "generalExam")
public class GeneralExam extends Model {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long id;
@Constraints.Required
public String name;
@OneToMany(mappedBy = "generalExam")
public List<SpecificExam> specificExam;
}
......和......
package models;
import com.avaje.ebean.Page;
import play.data.validation.Constraints;
import play.db.ebean.Model;
import javax.persistence.*;
/**
* Created by ben on 08.08.2015.
*/
@Entity
@Table(name = "specificExam")
public class SpecificExam extends Model {
/* --- VARIABLES ---*/
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "generalExam")
public GeneralExam generalExam;
@Constraints.Required
public String name;
}
最后 观点:
@(specificExamForm: Form[SpecificExam])
@import helper._
@implicitFieldConstructor = @{
FieldConstructor(twitterBootstrapInput.render)
}
@main {
<h1>Add a specific exam</h1>
@form(routes.Exams.saveSpecificExam()) {
<fieldset>
@select(
specificExamForm("generalExam.id"),
options(GeneralExam.options),
'_label -> "General Exam", '_default -> "-- Choose a general exam --", '_help -> "(every specific exam belongs to a general exam)",
'_showConstraints -> false
)
@inputText(specificExamForm("name"), '_label -> "Specific Exam Name", '_help -> "")
</fieldset>
<div class="actions">
<input type="submit" value="Add this specific exam" class="btn primary"> or
<a href="@routes.Exams.listExams("specific")" class="btn">Cancel</a>
</div>
}
}
最后再提供一些信息: 正如已经提到的,我一直在尝试许多不同的组合,我得到的一些错误信息是:
[PersistenceException:ERROR执行DML bindLog []错误[列 'name'“不能为null”]]
和
[PersistenceException:ERROR执行DML bindLog []错误[列'ID' 指定两次]]
我只是想提前表示非常感谢,非常欢迎每一个帮助,我现在无法运行一周以上 - .-