Hibernate对象没有映射异常

时间:2013-03-25 04:50:34

标签: java spring hibernate hql spring-orm

在HQL语句中遇到一些问题,无法从我的数据库中检索所有组。 我得到以下异常:

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;
    }

}

以防万一这是这个项目的git repo: http://github.com/dmcquillan314/YouthMinistryHibernate

如果需要有关此错误的任何其他信息,请与我联系。我将修改帖子。

非常感谢任何想法。提前谢谢。

1 个答案:

答案 0 :(得分:3)

您已在Group类中重写default entity name,这可能是该类的简单名称:

@Entity(name="GROUP_DETAILS")

因此,您不能在查询中将Group用作实体名称。有两种方法可以解决这个问题:

如果在HQL中使用“GROUP_DETAILS”,则查询应该成功。或者,您可以省略Entity注释的name属性并保持HQL不变。