Play Framework 2.x - @ManyToOne关系不适用于我的视图表单

时间:2015-08-20 19:46:08

标签: java hibernate jpa playframework many-to-one

我是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'   指定两次]]

我只是想提前表示非常感谢,非常欢迎每一个帮助,我现在无法运行一周以上 - .-

0 个答案:

没有答案