Announcement Announcement Module
Collapse
No announcement yet.
Problem with Spring 3.0 + Hibernate 3.3: QuerySyntaxException: Class is not mapped Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem with Spring 3.0 + Hibernate 3.3: QuerySyntaxException: Class is not mapped

    Hello everybody.

    I'm starting a new project using Spring 3.0 and Hibernate 3.3, on MyEclipse 10.

    I built the skeleton web application and deployed on JBoss 6.1, and it works.

    I bult a sample application using Hibernate on MySql, and it works.

    I have problems when moving the Hibernate stuff in the web project.

    I put this in applicationContext.xml

    Code:
        <bean id="sessionFactory"
        	class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        	<property name="dataSource">
        		<ref bean="TestDS" />
        	</property>
        	<property name="hibernateProperties">
        		<props>
        			<prop key="hibernate.dialect">
        				org.hibernate.dialect.MySQLDialect
        			</prop>
        			<prop key="hibernate.show_sql">true</prop> 
        		</props>
        	</property>
        	<property name="packagesToScan">
    			<list>
    				<value>net.tarrasque.springtest2.db</value>
    			</list>
    		</property>
    	    <property name="configurationClass">
    	        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    	    </property>
        </bean>
        <bean id="TestIssueDAO"
        	class="net.tarrasque.springtest2.db.TestIssueDAO">
        	<property name="sessionFactory">
        		<ref bean="sessionFactory" />
        	</property>
        </bean>
    This is a snippet of te entity class, generated by the database reverse engineering tools of MyEclipse

    Code:
    package net.tarrasque.springtest2.db;
    
    import javax.persistence.AttributeOverride;
    import javax.persistence.AttributeOverrides;
    import javax.persistence.Column;
    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;
    import javax.persistence.Table;
    
    /**
     * TestIssue entity. @author MyEclipse Persistence Tools
     */
    @Entity
    @Table(name = "test_issue", catalog = "coa")
    public class TestIssue implements java.io.Serializable {
    
    	// Fields
    
    	private TestIssueId id;
    
    ...
    From what I can see, all annotations are correct

    The tools also created a DAO, referenced also in applicationContext, where is injected the SessionFactory

    Code:
    package net.tarrasque.springtest2.db;
    
    import java.util.List;
    import org.hibernate.LockMode;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
    
    /**
     * A data access object (DAO) providing persistence and search support for
     * TestIssue entities. Transaction control of the save(), update() and
     * delete() operations can directly support Spring container-managed
     * transactions or they can be augmented to handle user-managed Spring
     * transactions. Each of these methods provides additional information for how
     * to configure it for the desired type of transaction control.
     * 
     * @see net.tarrasque.springtest2.db.TestIssue
     * @author MyEclipse Persistence Tools
     */
    
    public class TestIssueDAO extends HibernateDaoSupport {
    	private static final Logger log = LoggerFactory
    			.getLogger(TestIssueDAO.class);
    
    
    ...
    
    	public List findAll() {
    		log.debug("finding all TestIssue instances");
    		try {
    			String queryString = "from TestIssue";
    			return getHibernateTemplate().find(queryString);
    		} catch (RuntimeException re) {
    			log.error("find all failed", re);
    			throw re;
    		}
    	}
    
    ...

    Again, I can't see anything wrong there


    I use the DAO in my simple controller

    Code:
    /**
     * 
     */
    package net.tarrasque.springtest2.web;
    
    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import net.tarrasque.springtest2.db.TestIssue;
    import net.tarrasque.springtest2.db.TestIssueDAO;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
    
    @Controller
    public class IssueController extends MultiActionController {
    	@Autowired
    	private TestIssueDAO testIssueDAO;
    	
    	@RequestMapping({"/issues"})
    	public ModelAndView list(HttpServletRequest request, HttpServletResponse response) {
    		
    		List<TestIssue> list = testIssueDAO.findAll();
    		
    		ModelMap modelMap = new ModelMap();
    		modelMap.addAttribute("issues", list);
    				
    		return new ModelAndView("IssueList");
    		
    	}
    		
    }
    The URL mapping works great, but when I go to localhost:8080/MyApp/issues I only get an error:

    Code:
    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.orm.hibernate3.HibernateQueryException: TestIssue is not mapped [from TestIssue]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: TestIssue is not mapped [from TestIssue]
    	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656)
    	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    I tried all other methods of the DAO, still same error or similar. It looks like the entity class is not parsed at all for annotations. In facts I expected to see some lines in the server console during startup indicating that some annotated classes were found, but I see nothing of this.

    Am I forgetting something? The DB connection is OK, the same DAO and entity class used in the standalone test java app with annotations referenced in hibernate.cfg.xml with

    <mapping class="net.tarrasque.springtest.db.TestIssue" />

    work.

    I really have no other ideas...

  • #2
    Can you try removing this as it should not be required:

    Code:
    <property name="configurationClass">
    <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
    Not sure that having this in place would cause this issue however.

    Although is seems possible given the Javadoc.

    http://static.springsource.org/sprin...va.lang.Class)
    Last edited by alanhay; Apr 18th, 2013, 10:07 AM.

    Comment


    • #3
      No, that's not the problem. I had not that property set at the beginning, it's part of the tests I'm doing to make it work.

      I just tried removing it, and the result is unfortunately the same.

      I also tried explicitly setting the annotatedClass properties

      Code:
          	<property name="annotatedClasses">
          		<list>
          			<value>net.tarrasque.springtest2.db.TestIssue</value>
          		</list>
          	</property>
      And even pointing to a small external Hibernate configuration file, like in the test project without Spring

      Code:
      	    <property name="configLocation">
      	    	<value>classpath:hibernate.cfg.xml</value>
      	    </property>
      where src/hibernate.cfg.xml contains:

      Code:
      <?xml version='1.0' encoding='UTF-8'?>
      <!DOCTYPE hibernate-configuration PUBLIC
                "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
      
      <hibernate-configuration>
          <session-factory>
              <mapping class="net.tarrasque.springtest2.db.TestIssue"/>
          </session-factory>
      </hibernate-configuration>
      But nothing changes.

      Comment

      Working...
      X