在数据库中插入期间出现@OneToMany或@ManyToMany映射错误

时间:2014-01-30 12:34:24

标签: hibernate object mapping relation

public String createExam(HttpServletRequest request, Model model) throws Exception {
    QuestionBankService questionbankService = (QuestionBankService) context.getBean("fetchQuestion");
    HttpSession session = request.getSession(true);
            SessionFactory sessionfactory = new Configuration().configure().buildSessionFactory();
    Session sessions = sessionFactory.getCurrentSession();
    String examId = request.getParameter("examid");
    String examName = request.getParameter("examname");
    String examDate = request.getParameter("examdate");
    String examDuration = request.getParameter("examduration");

现在,当我尝试在SessionFactory sessionfactory = new Configuration()。configure()。buildSessionFactory();中运行此代码时,我收到以下错误。

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: org.iitb.exam.main.dto.Exam.questionBank[org.iitb.exam.main.dto.QuestionBank]
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
  • 根本原因

    org.hibernate.AnnotationException:使用@OneToMany或@ManyToMany定位未映射的类:org.iitb.exam.main.dto.Exam.questionBank [org.iitb.exam.main.dto.QuestionBank] org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1185) org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:710) org.hibernate.cfg.annotations.CollectionBinder $ 1.secondPass(CollectionBinder.java:645) org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:65) org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1716) org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1423) org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1856) org.iitb.exam.main.formcontrollers.ExamCreatedFormController.createExam(ExamCreatedFormController.java:60) sun.reflect.NativeMethodAccessorImpl.invoke0(原生方法) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:616) org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838) javax.servlet.http.HttpServlet.service(HttpServlet.java:647) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

我无法理解我做错了什么。我开始知道与QuestionBand相关的Exam.java有问题,编写的代码如下:

    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(name = "QuestionBank_Exam_Mapping",
             joinColumns = { @JoinColumn(name = "examid")},
             inverseJoinColumns = { @JoinColumn(name = "questionid") })
private Set<QuestionBank> questionBank = new HashSet<QuestionBank>();

我想通过向用户提供用户界面来创建仅考试条目,在那里他将输入一些必要的参数,如考试名称,考试日期,考试持续时间等。 还有一个依赖项,我必须再次使用advt_exam_post表mappin中的examid为考试创建一个条目。我已经在会议中提出了建议,因此我可以在该表中输入。我的困惑是为什么它会向我显示问题库的错误。在问题库和考试表映射中,与examid和questionid存在依赖关系,仅当用户为特定考试选择特定问题时才会填写。

现在请让我知道我在哪里做了一些错误的事情,并在我的代码中造成混乱。在调试程序中浪费了大量的时间:(

1 个答案:

答案 0 :(得分:0)

错误表明QuestionBank不是实体。如果它不是实体,您应该将其设为一个或映射到不同的类型。

Use of @OneToMany or @ManyToMany targeting an unmapped class: org.iitb.exam.main.dto.Exam.questionBank

包名称'dto'表明该类型不是一个实体。也许你期待那里有另一种类型,比如org.iitb.exam.main.domain.exam.QuestionBank,所以你也应该检查你的DTO和实体具有相同类型名称的导入。在这种情况下,由于混淆的可能性,不鼓励使用相同的类型名称。