2013-10-04 3 views
2

저는 플레이 프레임 워크의 초보자이며 폼 데이터를 두 개의 다른 테이블에 저장하는 데 어려움이 있습니다.OneToMany 관계 및 플레이 프레임 워크를 사용한 폼 저장

양식을 제출하면 이름, 성 및 텍스트가 데이터베이스에 저장되지만 학교 이름이 학교 테이블에 저장되지 않는 이유를 찾을 수 없습니다. 튜토리얼을보고 다른 사람들의 샘플 코드를 살펴보고 해결책을 찾지 못했습니다. 제발 누군가가 나를 도울 수 있다면 정말 고맙겠습니다.

후보 모델 :

package models; 

import java.util.ArrayList; 
import java.util.List; 

import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.OneToMany; 

import play.db.ebean.Model; 

@Entity 
public class Candidate extends Model { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public Long id; 

    public String firstName; 

    public String lastName; 

    public boolean sponsorshipStatus; 

    public boolean proceedToInterview; 

    public String text; 

    @OneToMany(mappedBy="candidate", cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
    private List<School> schools = new ArrayList<School>(); 

    /** 
    * Generic query helper for entity Candidate with id Long 
    */ 
    public static Model.Finder<Long, Candidate> find = new Model.Finder<Long, Candidate>(
      Long.class, Candidate.class); 


} 

학교 모델 :

package models; 

import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.ManyToOne; 

import play.db.ebean.Model; 

@Entity 
public class School extends Model { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public Long id; 

    public String schoolName; 

    @ManyToOne(cascade=CascadeType.ALL) 
    public Candidate candidate = new Candidate(); 




    /** 
    * Generic query helper for entity Company with id Long 
    */ 
    public static Model.Finder<Long, School> find = new Model.Finder<Long, School>(
      Long.class, School.class); 

} 

양식 서식 : 여기

내가 가진 무엇

@(candidateForm: Form[Candidate]) 

@import helper._ 

@main("Create Candidate"){ 

    <h1>Add a Candidate</h1> 

    @form(routes.Application.save()) { 

     <fieldset> 
     ${candidateForm("firstName")} 
      @inputText(candidateForm("firstName"), '_label -> "First Name") 
      @inputText(candidateForm("lastName"), '_label -> "Last Name") 
      @inputText(candidateForm("text"), '_label -> "Text") 
      @inputText(candidateForm("schoolName"), '_label -> "School") 




     </fieldset> 

     <div class="actions"> 
      <input type="submit" value="Create this computer" class="btn primary"> or 
      <a href="" class="btn">Cancel</a> 
     </div> 
    } 
} 

컨트롤러 :

package controllers; 

import static play.data.Form.form; 
import models.Candidate; 
import play.data.Form; 
import play.mvc.Controller; 
import play.mvc.Result; 
import views.html.createForm; 
import views.html.index; 

public class Application extends Controller { 

    public static Result index() { 
     return ok(index.render("Your new application is ready.")); 
    } 

    /** 
    * Display the 'new candidate form'. 
    */ 
    public static Result create() { 
     Form<Candidate> candidateForm = form(Candidate.class); 
     return ok(views.html.createForm.render(candidateForm)); 
    } 

    /** 
    * Handle the 'new computer form' submission 
    */ 
    public static Result save() { 
     Form<Candidate> candidateForm = form(Candidate.class).bindFromRequest(); 
     if(candidateForm.hasErrors()) { 
      return badRequest(createForm.render(candidateForm)); 
     } 
     candidateForm.get().save(); 
     flash("success", "Computer " + candidateForm.get().firstName + " has been created"); 
     return redirect("/candidates/new"); 
    } 

답변

0

몇 가지 :

왜 학교 목록이 비공개? 나는 사물을 변화시키지 만 보일만한 가치가 있다고 생각하지 않습니다.

컬렉션이기 때문에 절약되지 않을 것입니다. 기존 학교를 검색 할 때 프로그램에 대한 방향을 제시하지 않아도됩니다. (그리고 ID를 전달하면 필드가 schools.id와 같은 것으로 간주 될 것입니다.)을 선택하여 컬렉션에 추가하거나 새 학교를 만든 다음 모델 테이블에 추가 한 다음 컬렉션에 추가합니다. 제가 주로 1.x에서 플레이하고 여러분의 템플릿이 2.x 인 것처럼 보이기 때문에 템플릿 문법에 익숙하지 않습니다.하지만 1.x 튜토리얼을 보면 관계에 대한 작업 방법에 대한 예제가 있다는 것을 기억하고 있습니다. 양식.

기차역에서 이것을 쓰면 링크를 찾을 수 없지만 올바른 방향으로 오게되면 좋겠다.

0

후보자 get(). save(); save.check 컨트롤러를 사용하고 있습니다. 구문 오류가있을 수 있습니다. 컴파일 시간 오류를 확인하십시오.

0

양식이 있습니다

@inputText (candidateForm ("schoolName"), '_label -> "학교")

그러나 후보 클래스는 shoolName 속성이 없습니다. Play와 함께 제공되는 컴퓨터 - 데이터베이스 샘플을 살펴보십시오. 회사 이름 목록이 들어있는 Computer 양식이 있습니다. 당신에게 도움이 될 것입니다.

관련 문제