2013-03-25 93 views
0

在HQL语句中存在一些问题以从我的数据库中检索所有组。 我得到以下异常:Hibernate对象未映射异常

org.hibernate.hql.internal.ast.QuerySyntaxException: Group is not mapped [from Group] 
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:324) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3291) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3180) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) ~[hibernate-core-4.1.6.Final.jar:4.1.6.Final] 

下面是相关代码:

GroupServiceDaoImpl: 
    public List<Group> getGroups() { 
     List list = getSessionFactory().getCurrentSession().createQuery("from Group").list(); 
     return (List<Group>) list; 
    } 

弹簧hibernate.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:c="http://www.springframework.org/schema/c" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <!-- Beans Declaration --> 
    <bean id="User" class="com.youthministry.domain.User"/> 
    <bean id="UserProfile" class="com.youthministry.domain.UserProfile"/> 
    <bean id="Event" class="com.youthministry.domain.Event"/> 
    <bean id="Group" class="com.youthministry.domain.Group"/> 
    <bean id="Role" class="com.youthministry.domain.Role"/> 
    <bean id="Location" class="com.youthministry.domain.Location"/> 
    <bean id="Image" class="com.youthministry.domain.Image"/> 
    <bean id="PageContent" class="com.youthministry.domain.PageContent"/> 
    <bean id="TextEntry" class="com.youthministry.domain.TextEntry"/> 

    <!-- User Service Declaration --> 
    <bean id="UserService" class="com.youthministry.service.impl.UserServiceImpl"> 
     <property name="userDao" ref="UserDao" /> 
    </bean> 
    <bean id="GroupService" class="com.youthministry.service.impl.GroupServiceImpl"> 
     <property name="groupDao" ref="GroupDao" /> 
    </bean> 

    <!-- User DAO Declaration --> 
    <bean id="UserDao" class="com.youthministry.dao.impl.UserDaoImpl"> 
     <property name="sessionFactory" ref="SessionFactory" /> 
    </bean> 
    <bean id="GroupDao" class="com.youthministry.dao.impl.GroupDaoImpl"> 
     <property name="sessionFactory" ref="SessionFactory" /> 
    </bean> 
    <bean id="EventDao" class="com.youthministry.dao.impl.EventDaoImpl"> 
     <property name="sessionFactory" ref="SessionFactory" /> 
    </bean> 
    <bean id="PageContentDao" class="com.youthministry.dao.impl.PageContentDaoImpl"> 
     <property name="sessionFactory" ref="SessionFactory" /> 
    </bean> 

    <!-- Data Source Declaration --> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
     <property name="url" value="jdbc:mysql://localhost:3306/YouthMinistry"/> 
     <property name="username" value="root"/> 
     <property name="password" value=""/> 
    </bean> 
    <!-- Session Factory Declaration --> 
    <bean id="SessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="annotatedClasses"> 
      <list> 
       <value>com.youthministry.domain.Event</value> 
       <value>com.youthministry.domain.Group</value> 
       <value>com.youthministry.domain.Image</value> 
       <value>com.youthministry.domain.Location</value> 
       <value>com.youthministry.domain.PageContent</value> 
       <value>com.youthministry.domain.Role</value> 
       <value>com.youthministry.domain.TextEntry</value> 
       <value>com.youthministry.domain.User</value> 
       <value>com.youthministry.domain.UserProfile</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" 
     c:_-ref="dataSource" /> 

    <!-- Enable the configuration of transactional behavior based on annotations --> 
    <tx:annotation-driven transaction-manager="txManager"/> 

    <!-- Transaction Manager is defined --> 
    <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="SessionFactory"/> 
    </bean> 

</beans> 

组: 包com.youthministry.domain;

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

@Entity(name="GROUP_DETAILS") 
public class Group { 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Long groupId; 
    private String groupName; 
    private String groupDesc; 

    public Long getGroupId() { 
     return groupId; 
    } 
    public void setGroupId(Long groupId) { 
     this.groupId = groupId; 
    } 
    public String getGroupName() { 
     return groupName; 
    } 
    public void setGroupName(String groupName) { 
     this.groupName = groupName; 
    } 
    public String getGroupDesc() { 
     return groupDesc; 
    } 
    public void setGroupDesc(String groupDesc) { 
     this.groupDesc = groupDesc; 
    } 

} 

以防万一,这里是这个项目的混帐回购协议: http://github.com/dmcquillan314/YouthMinistryHibernate

让我知道是否需要关于此错误的任何其他信息,我会编辑的帖子。

任何想法,不胜感激。提前致谢。

+0

其中是cfg文件?看起来像cfg​​文件doe不包含组enitity的条目 – 2013-03-25 04:54:03

回答

3

您已经覆盖了default entity name,这本来类的简单的名称,在组类:

@Entity(name="GROUP_DETAILS") 

因此,你不能在查询中使用集团作为实体名称。有两个选项可以解决这个问题:

如果在HQL中使用“GROUP_DETAILS”,查询应该成功。或者,您可以省略实体注释的名称属性,并保持HQL原样。

+0

是的,这固定它非常感谢你。 – dmcqu314 2013-03-26 14:17:13