2015-07-11 18 views
1

我已經使用Hibernate Reverse工程創建我的模型及其映射和關係。但是,當我嘗試做一個簡單的選擇時,顯示一個錯誤。我不知道我的映射有什麼問題。這是兩個模型的代碼。學生模型是父母,評估模型是孩子。java.lang.ExceptionInInitializerError和org.hibernate.AnnotationException:mappedBy引用一個未知的目標實體屬性:

評價模型:

  import java.util.Date; 
    import java.util.HashSet; 
    import java.util.Set; 
    import javax.persistence.AttributeOverride; 
    import javax.persistence.AttributeOverrides; 
    import javax.persistence.Column; 
    import javax.persistence.EmbeddedId; 
    import javax.persistence.Entity; 
    import javax.persistence.FetchType; 
    import javax.persistence.JoinColumn; 
    import javax.persistence.ManyToOne; 
    import javax.persistence.OneToMany; 
    import javax.persistence.Table; 
    import javax.persistence.Temporal; 
    import javax.persistence.TemporalType; 

    /** 
    * Assessment generated by hbm2java 
    */ 
    @Entity 
    @Table(name = "Assessment", catalog = "mydb") 
    public class AssessmentModel implements java.io.Serializable { 

     private AssessmentIdModel id; 
     private SpEdTeacherModel spedteacher; 
     private StudentModel Student; 
     private Date assessmentDate; 
     private Set<IepModel> ieps = new HashSet<IepModel>(0); 
     private Set<SkillassessmentModel> skillassessments = new HashSet<SkillassessmentModel>(0); 

     public AssessmentModel() { 
     } 

     public AssessmentModel(AssessmentIdModel id, SpEdTeacherModel spedteacher, StudentModel Student, Date assessmentDate) { 
      this.id = id; 
      this.spedteacher = spedteacher; 
      this.Student = Student; 
      this.assessmentDate = assessmentDate; 
     } 

     public AssessmentModel(AssessmentIdModel id, SpEdTeacherModel spedteacher, StudentModel Student, Date assessmentDate, Set<IepModel> ieps, 
       Set<SkillassessmentModel> skillassessments) { 
      this.id = id; 
      this.spedteacher = spedteacher; 
      this.Student = Student; 
      this.assessmentDate = assessmentDate; 
      this.ieps = ieps; 
      this.skillassessments = skillassessments; 
     } 

     @EmbeddedId 

     @AttributeOverrides({ 
       @AttributeOverride(name = "assessmentId", column = @Column(name = "assessment_id", nullable = false)), 
       @AttributeOverride(name = "spedId", column = @Column(name = "sped_id", nullable = false)), 
       @AttributeOverride(name = "studentId", column = @Column(name = "student_id", nullable = false)) }) 
     public AssessmentIdModel getId() { 
      return this.id; 
     } 

     public void setId(AssessmentIdModel id) { 
      this.id = id; 
     } 

     @ManyToOne(fetch = FetchType.LAZY) 
     @JoinColumn(name = "sped_id", nullable = false, insertable = false, updatable = false) 
     public SpEdTeacherModel getSpedteacher() { 
      return this.spedteacher; 
     } 

     public void setSpedteacher(SpEdTeacherModel spedteacher) { 
      this.spedteacher = spedteacher; 
     } 

     @ManyToOne(fetch = FetchType.LAZY) 
     @JoinColumn(name = "student_id", nullable = false, insertable = false, updatable = false) 
     public StudentModel getStudent() { 
      return this.Student; 
     } 

     public void setStudent(StudentModel Student) { 
      this.Student = Student; 
     } 

     @Temporal(TemporalType.DATE) 
     @Column(name = "assessment_date", nullable = false, length = 10) 
     public Date getAssessmentDate() { 
      return this.assessmentDate; 
     } 

     public void setAssessmentDate(Date assessmentDate) { 
      this.assessmentDate = assessmentDate; 
     } 

     @OneToMany(fetch = FetchType.LAZY, mappedBy = "Assessment") 
     public Set<IepModel> getIeps() { 
      return this.ieps; 
     } 

     public void setIeps(Set<IepModel> ieps) { 
      this.ieps = ieps; 
     } 

     @OneToMany(fetch = FetchType.LAZY, mappedBy = "Assessment") 
     public Set<SkillassessmentModel> getSkillassessments() { 
      return this.skillassessments; 
     } 

     public void setSkillassessments(Set<SkillassessmentModel> skillassessments) { 
      this.skillassessments = skillassessments; 
     } 

    } 

學生型號:

 import java.util.Date; 
    import java.util.HashSet; 
    import java.util.Set; 
    import javax.persistence.Column; 
    import javax.persistence.Entity; 
    import javax.persistence.FetchType; 
    import javax.persistence.GeneratedValue; 
    import static javax.persistence.GenerationType.IDENTITY; 
    import javax.persistence.Id; 
    import javax.persistence.JoinColumn; 
    import javax.persistence.ManyToOne; 
    import javax.persistence.OneToMany; 
    import javax.persistence.Table; 
    import javax.persistence.Temporal; 
    import javax.persistence.TemporalType; 

    /** 
    * Student generated by hbm2java 
    */ 
    @Entity 
    @Table(name = "Student", catalog = "mydb") 
    public class StudentModel implements java.io.Serializable { 

     private Integer studentId; 
     private GuardianModel guardian; 
     private String studentFname; 
     private String studentMname; 
     private String studentLname; 
     private Date studentBirthdate; 
     private int studentAge; 
     private String studentGender; 
     private String studentNationality; 
     private String studentProgram; 
     private Set<AssessmentModel> assessments = new HashSet<AssessmentModel>(0); 
     private Set<StudenthastherapistModel> studenthastherapists = new HashSet<StudenthastherapistModel>(0); 

     public StudentModel() { 
     } 

     public StudentModel(GuardianModel guardian, String studentFname, String studentMname, String studentLname, 
       Date studentBirthdate, int studentAge, String studentGender, String studentNationality, String studentProgram) { 
      this.guardian = guardian; 
      this.studentFname = studentFname; 
      this.studentMname = studentMname; 
      this.studentLname = studentLname; 
      this.studentBirthdate = studentBirthdate; 
      this.studentAge = studentAge; 
      this.studentGender = studentGender; 
      this.studentNationality = studentNationality; 
      this.studentProgram = studentProgram; 
     } 

     public StudentModel(GuardianModel guardian, String studentFname, String studentMname, String studentLname, 
       Date studentBirthdate, int studentAge, String studentGender, 
       String studentNationality, String studentProgram, Set<AssessmentModel> assessments, 
       Set<StudenthastherapistModel> studenthastherapists) { 
      this.guardian = guardian; 
      this.studentFname = studentFname; 
      this.studentMname = studentMname; 
      this.studentLname = studentLname; 
      this.studentBirthdate = studentBirthdate; 
      this.studentAge = studentAge; 
      this.studentGender = studentGender; 
      this.studentNationality = studentNationality; 
      this.studentProgram = studentProgram; 
      this.assessments = assessments; 
      this.studenthastherapists = studenthastherapists; 
     } 

     @Id 
     @GeneratedValue(strategy = IDENTITY) 

     @Column(name = "student_id", unique = true, nullable = false) 
     public Integer getStudentId() { 
      return this.studentId; 
     } 

     public void setStudentId(Integer studentId) { 
      this.studentId = studentId; 
     } 

     @ManyToOne(fetch = FetchType.LAZY) 
     @JoinColumn(name = "guardian_id", nullable = false) 
     public GuardianModel getGuardian() { 
      return this.guardian; 
     } 

     public void setGuardian(GuardianModel guardian) { 
      this.guardian = guardian; 
     } 

     @Column(name = "student_fname", nullable = false, length = 45) 
     public String getStudentFname() { 
      return this.studentFname; 
     } 

     public void setStudentFname(String studentFname) { 
      this.studentFname = studentFname; 
     } 

     @Column(name = "student_mname", nullable = false, length = 45) 
     public String getStudentMname() { 
      return this.studentMname; 
     } 

     public void setStudentMname(String studentMname) { 
      this.studentMname = studentMname; 
     } 

     @Column(name = "student_lname", nullable = false, length = 45) 
     public String getStudentLname() { 
      return this.studentLname; 
     } 

     public void setStudentLname(String studentLname) { 
      this.studentLname = studentLname; 
     } 

     @Temporal(TemporalType.DATE) 
     @Column(name = "student_birthdate", nullable = false, length = 10) 
     public Date getStudentBirthdate() { 
      return this.studentBirthdate; 
     } 

     public void setStudentBirthdate(Date studentBirthdate) { 
      this.studentBirthdate = studentBirthdate; 
     } 

     @Column(name = "student_age", nullable = false) 
     public int getStudentAge() { 
      return this.studentAge; 
     } 

     public void setStudentAge(int studentAge) { 
      this.studentAge = studentAge; 
     } 

     @Column(name = "student_gender", nullable = false, length = 6) 
     public String getStudentGender() { 
      return this.studentGender; 
     } 

     public void setStudentGender(String studentGender) { 
      this.studentGender = studentGender; 
     } 

     @Column(name = "student_nationality", nullable = false, length = 15) 
     public String getStudentNationality() { 
      return this.studentNationality; 
     } 

     public void setStudentNationality(String studentNationality) { 
      this.studentNationality = studentNationality; 
     } 

     @Column(name = "student_program", nullable = false, length = 45) 
     public String getStudentProgram() { 
      return this.studentProgram; 
     } 

     public void setStudentProgram(String studentProgram) { 
      this.studentProgram = studentProgram; 
     } 

     @OneToMany(fetch = FetchType.LAZY, mappedBy = "Student") 
     public Set<AssessmentModel> getAssessments() { 
      return this.assessments; 
     } 

     public void setAssessments(Set<AssessmentModel> assessments) { 
      this.assessments = assessments; 
     } 

     @OneToMany(fetch = FetchType.LAZY, mappedBy = "Student") 
     public Set<StudenthastherapistModel> getStudenthastherapists() { 
      return this.studenthastherapists; 
     } 

     public void setStudenthastherapists(Set<StudenthastherapistModel> studenthastherapists) { 
      this.studenthastherapists = studenthastherapists; 
     } 

    } 

這裏是錯誤:

  HTTP Status 500 - javax.servlet.ServletException: java.lang.ExceptionInInitializerError 
    type Exception report 
    message javax.servlet.ServletException: java.lang.ExceptionInInitializerError 
    description The server encountered an internal error that prevented it from fulfilling this request. 
    exception 
    org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.ExceptionInInitializerError 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:556) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:462) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

    root cause 
    javax.servlet.ServletException: java.lang.ExceptionInInitializerError 
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:916) 
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:845) 
     org.apache.jsp.index_jsp._jspService(index_jsp.java:138) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 


    root cause 
    java.lang.ExceptionInInitializerError 
    softdev.asese.utils.HibernateUtil.<clinit>(HibernateUtil.java:17) 
    softdev.asese.dao.GuardianDao.getGuardian(GuardianDao.java:16) 
    org.apache.jsp.index_jsp._jspService(index_jsp.java:93) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 



    root cause 
    org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: softdev.asese.models.AssessmentModel.Student in softdev.asese.models.StudentModel.assessments 
     org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:769) 
     org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:729) 
     org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:70) 
     org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1697) 
     org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1426) 
     org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846) 
     org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930) 
     softdev.asese.utils.HibernateUtil.<clinit>(HibernateUtil.java:14) 
     softdev.asese.dao.GuardianDao.getGuardian(GuardianDao.java:16) 
     org.apache.jsp.index_jsp._jspService(index_jsp.java:93) 
     org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
     javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
     org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) 
     org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 
     org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 
     javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

回答

0

你的類似乎是好的,但在AssessmentModel你的財產學生的大寫。嘗試更改爲小寫屬性名稱和mappedBy引用。此外,您可以嘗試像我的示例一樣添加一些參數到您的註釋中。我對hibernate相對較新,並且知道註釋中的一個簡單單詞可能很重要。

在我父類我有...

@OneToMany(fetch=FetchType.LAZY, mappedBy="cobpresGestion") 
@Cascade({CascadeType.ALL}) 
public Set<CobpresOptionDet> getCobpresOptionDets() { 
    return this.cobpresOptionDets; 
} 

在我的孩子I類有...

@ManyToOne(fetch=FetchType.LAZY, optional=false) 
@JoinColumn(name="IDCOBPRES", nullable=false, insertable=true, updatable=true) 
public CobpresGestion getCobpresGestion() { 
    return this.cobpresGestion; 
} 
+0

謝謝!我改變了命名,現在它正在工作! –

0

的異常告訴你什麼是錯的:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "Student") 

mappedBy reference an unknown target entity property: softdev.asese.models.AssessmentModel.Student in softdev.asese.models.StudentModel.assessments

應該

@OneToMany(fetch = FetchType.LAZY, mappedBy = "student") 
+0

謝謝!我改變了命名,現在它正在工作! –

相關問題