【问题标题】:Hibernate syntax exception table not mappedHibernate 语法异常表未映射
【发布时间】:2015-01-20 19:56:28
【问题描述】:

我一直遇到以下错误 - 请求处理失败;嵌套异常是 org.hibernate.hql.internal.ast.QuerySyntaxException:未映射强制 [来自强制]。查看此站点上的其他问题,错误映射类型似乎是一个问题,但我不相信这里会出现这种情况,因为我在 HQL 中使用“from Enforcement”并且我的课程是 Enforcement。

Enforcement.java:

package testspringmvc.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity

@Table(name="enforcement")
public class Enforcement extends Element{
    @Id
    @Column(name="ENFORCEMENT_CD")
    private String Id;

    @Column(name="ENFORCEMENT_DESC")
    private String name;

    public String getId() {
        return Id;
    }

    public void setId(String Id) {
        this.Id = Id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

MemberController.java

public class MemberController {
    @Autowired
    private RepositoryServices repositoryService;


    private FilterOption filterOption;

    @RequestMapping(value = "/search", method = RequestMethod.GET)
    public ModelAndView loadFormPage() {
        List<Document> repositoryList = new ArrayList<Document>();

        // Create and add lists and objects to the model.
        ModelAndView model = new ModelAndView("search");
        model.addObject("document", new Document());
        model.addObject("filter", new FilterOption());
        model.addObject("enforcementList", repositoryService.getEnforcementList());
        model.addObject("repositoryList", repositoryList);
        model.addObject("repositorySize", repositoryList.size());
        return model;
    }
}

RepositoryDaoImpl.java:

@Repository
public class RepositoryDaoImpl implements RepositoryDao {

    @Autowired
    SessionFactory sessionFactory;

    @Override
    public List<Enforcement> getEnforcementList() {
        Session session = sessionFactory.openSession();
        @SuppressWarnings("unchecked")
        List<Enforcement> enforcementList = session.createQuery("from Enforcement").list();
        System.out.println(enforcementList);
        session.close();
        return enforcementList;
    }

}

RepositoryServicesImpl.java:

@Service
public class RepositoryServicesImpl implements RepositoryServices 
{  

    @Autowired  
    RepositoryDao repodao;  

    @Override
    public List<Enforcement> getEnforcementList() {
        return repodao.getEnforcementList();
    }
} 

堆栈跟踪:

JBWEB000070: exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.hql.internal.ast.QuerySyntaxException: Enforcement is not mapped [from Enforcement]
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
JBWEB000071: root cause

org.hibernate.hql.internal.ast.QuerySyntaxException: Enforcement is not mapped [from Enforcement]
    org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)
    org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)
    org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93)
    org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:324)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3420)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3309)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
    org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:250)
    org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
    org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138)
    org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
    org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
    org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221)
    org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199)
    org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1784)
    gaimsspringmvc.repo.RepositoryDaoImpl.getEnforcementList(RepositoryDaoImpl.java:52)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:606)
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
    com.sun.proxy.$Proxy34.getEnforcementList(Unknown Source)
    gaimsspringmvc.services.RepositoryServicesImpl.getEnforcementList(RepositoryServicesImpl.java:56)
    gaimsspringmvc.mvc.MemberController.loadFormPage(MemberController.java:79)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:606)
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 

【问题讨论】:

  • 你能发布完整的堆栈跟踪吗?
  • 添加了堆栈跟踪
  • 您的hibernate.cfg.xml 可能有问题,例如:stackoverflow.com/questions/15144316/…
  • 你是对的,丹尼斯!我不得不修改我的 application-context.xml 文件并将该类添加为 sessionFactory bean 中的列表值
  • 完美!请接受您自己的答案,以便人们知道问题已解决。

标签: java spring hibernate model-view-controller


【解决方案1】:

也许这是一个区分大小写的问题?试试@Table(name="Enforcement")

【讨论】:

  • 我也试过了,但仍然遇到同样的异常。
【解决方案2】:

仅供参考,将类名作为值添加到 sessionFactory bean 中的 annotatedClasses 列表中解决了我的困境。

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>testspringmvc.domain.Enforcement</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show.sql">true</prop>
                <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
                <prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/test</prop>
                <prop key="hibernate.connection.username">root</prop>
                <prop key="hibernate.connection.password">gaims</prop>
                <prop key="hibernate.connection.pool_size">1</prop>
                <!-- <prop key="hibernate.hbm2dll.auto">validate</prop> -->
            </props>
        </property>

    </bean>

【讨论】:

    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2016-12-17
    • 2018-02-24
    相关资源
    最近更新 更多