0

I'm just trying to get Hibernate to work for the first time... I think I'm close, but I'm not sure why my mapping isn't working.

I have a class, User, and I have the following User.hbm.xml mapping for it.

<hibernate-mapping>
    <class name="User" table="users">
        <composite-id name="id" class="User">
            <key-property name="id" type="java.lang.Integer">
                <column name="id" />
            </key-property>
            <key-property name="fname" type="string">
                <column name="fname" />
            </key-property>
            <key-property name="lname" type="string">
                <column name="lname" />
            </key-property>
        </composite-id>
    </class>
</hibernate-mapping>

When I try the following:

User user = null;
try {
    session.beginTransaction();         
    user = (User) session.get(User.class, id);
    session.getTransaction().commit();
}
catch (HibernateException e) {
    e.printStackTrace();
    session.getTransaction().rollback();
}

I am getting:

java.lang.ClassNotFoundException: User
    java.net.URLClassLoader$1.run(Unknown Source)
    java.net.URLClassLoader$1.run(Unknown Source)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(Unknown Source)
    org.springframework.boot.loader.LaunchedURLClassLoader.findClass(LaunchedURLClassLoader.java:148)
    java.lang.ClassLoader.loadClass(Unknown Source)
    org.springframework.boot.loader.LaunchedURLClassLoader.doLoadClass(LaunchedURLClassLoader.java:131)
    org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:103)
    java.lang.ClassLoader.loadClass(Unknown Source)
    java.lang.Class.forName0(Native Method)
    java.lang.Class.forName(Unknown Source)
    org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:193)
    org.hibernate.mapping.Component.getComponentClass(Component.java:138)
    org.hibernate.tuple.component.PojoComponentTuplizer.buildGetter(PojoComponentTuplizer.java:155)
    org.hibernate.tuple.component.AbstractComponentTuplizer.<init>(AbstractComponentTuplizer.java:64)
    org.hibernate.tuple.component.PojoComponentTuplizer.<init>(PojoComponentTuplizer.java:59)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    java.lang.reflect.Constructor.newInstance(Unknown Source)
    org.hibernate.tuple.component.ComponentTuplizerFactory.constructTuplizer(ComponentTuplizerFactory.java:98)
    org.hibernate.tuple.component.ComponentTuplizerFactory.constructDefaultTuplizer(ComponentTuplizerFactory.java:122)
    org.hibernate.tuple.component.ComponentMetamodel.<init>(ComponentMetamodel.java:81)
    org.hibernate.mapping.Component.getType(Component.java:180)
    org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:310)
    org.hibernate.mapping.RootClass.validate(RootClass.java:271)
    org.hibernate.cfg.Configuration.validate(Configuration.java:1358)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1849)
    com.cloudfordev.controlpanel.HibernateUtil.configureSessionFactory(HibernateUtil.java:16)
    com.cloudfordev.controlpanel.GetController.greeting(GetController.java:19)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:214)
    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:748)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:947)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:878)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:946)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:822)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)

Am I correct that this is a problem with my User.hbm.xml?

If so, what is the solution?

Thank you,

1
  • Try to add the qualified classname of user to your mapping. Means with package names Commented Dec 26, 2013 at 22:15

1 Answer 1

4

You have to specify the fully qualified class name for your class in

<class name="User" table="users">

So if your User class is in package com.entities, you would need to have

<class name="com.entities.User" table="users">

If your class is in the default package, put it in an actual package and save yourself the headaches further down the line.

Sign up to request clarification or add additional context in comments.

2 Comments

That was it, so easy, thanks. It's been a long road.
@LynnOwens You're welcome. Keep in mind that all libraries that use reflection require fully qualified class names.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.