2013-01-03 1 views
3

coldfusion9 orm과 fw1을 사용하여 학생, 학년 및 교사 간의 관계를 정의하려고합니다. 이것은 내가 교사와 학생 사이의 관계를 연구하는 방법입니다. Student.cfc 모델에학생 기록에 교사와 학년을 추가 할 수 없음 null이 아닌 속성 참조가 null이 됨

// Use a mysql autonumber for an ID 
       property name="id" column="school_studentid" type="numeric" fieldtype="id" generator="identity"; 
       property name="Fullname" column="school_studentFullname" type="string" length="128" required="true" notnull="true"; 
       property name="email" column="school_studentEmail" type="string" length="128" required="true" notnull="true"; 
       property name="birthdate" column="school_studentbirthdate" type="date" required="false" notnull="true"; 
       property name="gender" column="school_studentgender" type="boolean" required="false" notnull="true"; 
       property name="phone" column="school_studentphone" type="string" required="false" notnull="true"; 
       property name="city" column="school_studentcity" type="string" required="false" notnull="true"; 
       property name="state" column="school_studentstate" type="string" required="false" notnull="true"; 
       property name="country" column="school_studentcountry" type="string" required="false" notnull="true"; 
       property name="subject" column="school_studentsubject" type="string" required="false" notnull="true"; 
       property name="Address" column="school_StudentAddress" ormtype="text"; 


       //relate student with teacher 
       property name="Teacher" fieldtype="many-to-one" cfc="Teacher" fkcolumn="teacher_school_studentId" singularname="Teacher"; 

Teacher.cfc

// Use a mysql autonumber for an ID 
       property name="id" column="school_teacherid" fieldtype="id" generator="identity" generated="insert"; 
       property name="Fullname" column="school_teacherFullname" type="string" length="128" required="true" notnull="true"; 
       property name="email" column="school_teacherEmail" type="string" length="128" required="true" notnull="true"; 
       property name="birthdate" column="school_teacherbirthdate" type="date" required="false" notnull="true"; 
       property name="gender" column="school_teachergender" type="boolean" required="false" notnull="true"; 
       property name="phone" column="school_teacherphone" type="string" required="false" notnull="true"; 
       property name="city" column="school_teachercity" type="string" required="false" notnull="true"; 
       property name="state" column="school_teacherstate" type="string" required="false" notnull="true"; 
       property name="country" column="school_teachercountry" type="string" required="false" notnull="true"; 
       property name="Degree" column="school_teacherDegree" ormtype="text"; 
       property name="experience" column="school_teacherExperience" ormtype="text"; 
       property name="subject" column="school_teachersubject" ormtype="text"; 
       property name="Active" column="school_teacherActive" ormtype="text"; 
       property name="Address" column="school_teacherAddress" ormtype="text"; 

      property name="Student" fieldtype="one-to-many" cfc="Student" fkcolumn="teacher_school_studentId" singularname="Student" cascade="all" inverse="true"; 

이 내가 학생 기록을 저장하고에 교사와 등급을 설정하고있는 방법입니다

component output="false" persistent="true" accessors="true" entityname="Grade" table="school_grade" { 


     //Use mysql autonumber for an Id 
     property name="id" column="school_gradeId" fieldtype="id" generator="identity"; 
     property name="Name" column="school_gradeName" type="string" length="128" required="false" notnull="true"; 


     //Relate the Grade with student 
     property name="Student" fieldtype="one-to-many" cfc="Student" fkcolumn="grade_school_StudentId" notnull="true" singularname="Student" lazy="extra"; 

grade.cfc 학생 개체입니다.

<cfset var teacher = getTeacherService().teacher(arguments.rc.id)> 
<cfset var grade = getGradeService().grade(arguments.rc.id)> 
<cfset Student.setTeacher(teacher)> 
<cfset Student.setGrade(grade)> 
<cfset getStudentService().save(student)> 

저는 학생용 컨트롤러에서이 방법을 사용합니다. 이 내가 등급 메소드를 호출하고 같은 방식으로 서비스 내 teacher.cfc

<cffunction name="teacher" returntype="component" access="public"> 
       <cfargument name="id" required="true"> 

       <cfif Len(trim(arguments.id)) EQ 0 or arguments.id EQ 0> 
        <cfset result = entityNew("Teacher")> 
       <cfelse> 
        <cfset result = entityLoad("Teacher",arguments.id,true)> 
       </cfif> 
       <cfreturn result> 
     </cffunction> 

입니다.

<cffunction name="grade" returntype="component" access="public"> 
        <cfargument name="id" required="true"> 
        <cfif Len(trim(arguments.id)) EQ 0 or arguments.id EQ 0> 
         <cfset result = entityNew("Grade")> 
        <cfelse> 
         <cfset result = entityLoad("Grade",arguments.id,true)> 
        </cfif> 
        <cfreturn result> 

      </cffunction> 

이것은 내가 추가하는 학생 양식에서 교사 이름과 성적 이름을 선택하는 방법입니다. 학생에게 교사와 학년을 저장하는 동안

<select name="TeacherId" id="TeacherId"> 
           <option value="0"<cfif rc.student.hasTeacher(teacher)>Selected</cfif>>Select Teacher</option> 
           <cfloop array="#rc.teacher#" index="teacher"> 
           <option value="#teacher.getId()#"<cfif rc.student.hasTeacher(teacher)>Selected</cfif>>#teacher.getFullname()#</option> 
           </cfloop> 
         </select> 

나는 문제가 발생하고 레코드 엔 액션 내 오류입니다 : 오류를 student.save : - null가 아닌 속성이 null 또는 과도 값을 참조 : Student.Teacher 유형 : Application 세부 사항 : 근원 : org.hibernate.PropertyValueException : not-null 속성은 null 값이나 일시적인 값을 참조한다 : Student.Teacher.

누군가 나를 도와주세요. 덕분에 .

+0

에 추가하는 두 getTeacherService(). 교사에게 같은 값 (arguments.rc.id) () 및 getGradeService(). grade()? –

+0

저는 그 값을 학생에게 전달하기 위해 전달하고 있습니다. 그런 다음 ID에 대한 교사와 성적 기반에 액세스 할 수 있습니다. 내가이 줄을 제거하면이 오류가 발생합니다. 속성 java.lang.String의 값을 id 유형의 객체에서 검색 할 수 없습니다. 예상되는 개체 유형은 Grade –

+0

입니다. 선생님을 학생 개체에 설정 한 다음 저장합니다. –

답변

1

먼저 교사 개체를 저장하고 표현 arguments.rc.id 수행하고 이유를 통과하는 어떤 학생