Piraba
Piraba

Reputation: 7004

Configured SessionFactory: null

I have created basic hibernate application. It throw error message.

Error is:

     Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : com/crmcall/entity/CallUsers.hbm.xml
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: com.crmcall.entity.CallUsers -> crmcallusers
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : com/crmcall/entity/Customers.hbm.xml
Oct 18, 2012 3:36:14 PM org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: com.crmcall.entity.Customers -> crmcustomermaster
Oct 18, 2012 3:36:14 PM org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : com/crmcall/entity/User.hbm.xml
Oct 18, 2012 3:36:14 PM org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: com.crmcall.entity.User -> crmusers
Oct 18, 2012 3:36:14 PM org.hibernate.cfg.Configuration doConfigure
INFO: Configured SessionFactory: null
Initial SessionFactory creation failed.org.hibernate.MappingException: component class not found: string
Exception in thread "main" java.lang.ExceptionInInitializerError
        at com.crmcall.util.HibernateUtil.<clinit>(HibernateUtil.java:27)
        at com.crmcall.dao.UserDAO.<init>(UserDAO.java:23)
        at com.crmcall.dao.UserDAO.main(UserDAO.java:36)
Caused by: org.hibernate.MappingException: component class not found: string
        at org.hibernate.mapping.Component.getComponentClass(Component.java:104)
        at org.hibernate.tuple.component.PojoComponentTuplizer.buildGetter(PojoComponentTuplizer.java:133)
        at org.hibernate.tuple.component.AbstractComponentTuplizer.<init>(AbstractComponentTuplizer.java:43)
        at org.hibernate.tuple.component.PojoComponentTuplizer.<init>(PojoComponentTuplizer.java:38)
        at org.hibernate.tuple.component.ComponentEntityModeToTuplizerMapping.<init>(ComponentEntityModeToTuplizerMapping.java:52)
        at org.hibernate.tuple.component.ComponentMetamodel.<init>(ComponentMetamodel.java:50)
        at org.hibernate.mapping.Component.buildType(Component.java:152)
        at org.hibernate.mapping.Component.getType(Component.java:145)
        at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
        at org.hibernate.mapping.RootClass.validate(RootClass.java:193)
        at org.hibernate.cfg.Configuration.validate(Configuration.java:1102)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1287)
        at com.crmcall.util.HibernateUtil.<clinit>(HibernateUtil.java:24)
        ... 2 more
Caused by: java.lang.ClassNotFoundException: string
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100)
        at org.hibernate.mapping.Component.getComponentClass(Component.java:101)

This is my Hibernate.cfg.xml file:

     <hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://192.168.1.5:3306/crmtest</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>
    <property name="hibernate.hbm2ddl.auto">create-drop</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <!-- Enable Hibernate automatic session context management -->
    <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
   <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

    <mapping resource="com/crmcall/entity/CallUsers.hbm.xml"/>
    <mapping resource="com/crmcall/entity/Customers.hbm.xml"/>
    <mapping resource="com/crmcall/entity/User.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

This is my User.hbm.xml

    <hibernate-mapping>
  <class name="com.crmcall.entity.User" table="crmusers">
      <composite-id name="userPK" >
           <key-property name="businessUnit" column="BusinessUnit" type="string"/>
           <key-property name="userID" column="UserID" type="string"/>
      </composite-id>

        <property name="recID" >
          <column name="RecID"/>
        </property>

        <property name="password">
          <column name="Password"/>
        </property>

        <property name="userName">
          <column name="UserName"/>
        </property>

        <property name="userType">
          <column name="UserType"/>
        </property>

        <property name="userLevel">
          <column name="UserLevel"/>
        </property>

        <property name="customerCode">
          <column name="CustomerCode"/>
        </property>

        <property name="customerCodeson">
          <column name="CustomerCodeson"/>
        </property>

        <property name="locationCode">
          <column name="LocationCode"/>
        </property>

        <property name="lastUpdatedBy">
          <column name="LastUpdatedBy"/>
        </property>

        <property name="lastUpdatedOn" type="timestamp">
          <column name="LastUpdatedOn"/>
        </property>

      <property name="email" type="string">
          <column name="Email"/>
        </property>

  </class>

</hibernate-mapping>

This is my calling place :

     public class UserDAO {
    private Session session = null;

    public UserDAO() {
        session =  HibernateUtil.currentSession();
    }

     public List<User> getAllUsers() {
        Transaction tn = session.beginTransaction();
        List<User> users = session.createQuery("from crmusers cu order by cu.UserID").list();
        System.out.println("==" + users.size());
        tn.commit();
        return users;
    }


     public static void main(String[] args){
         UserDAO userDAO = new UserDAO();
         userDAO.getAllUsers();
     }
}

This is my project folder structre: enter image description here

Please tell me what is an issue in my code?

Thanks in advance..

Upvotes: 1

Views: 14798

Answers (6)

MrArbi
MrArbi

Reputation: 25

<composite-id name="userPK" >
       <key-property name="businessUnit" column="BusinessUnit" type="String"/>
       <key-property name="userID" column="UserID" type="String"/>
  </composite-id>

try with changing string to String

Upvotes: 1

Steve Ebersole
Steve Ebersole

Reputation: 9443

Both "string" and "java.lang.String" are aliases for org.hibernate.type.StringType, so either should work in terms of naming types.

I am actually not so sure the problem is in the mapping for User. That mapping looks fine. Based on that exception I would more expect that somewhere you have

<composite-id ... class="string">

or

<component ... class="string">

or something like that.

Upvotes: 1

subodh
subodh

Reputation: 6158

Hibernate use the reflection to determine the mapping type at runtime. It seems your mapping is correct, But if you still getting the same problem. I will suggest you to remove the type attribute for the time being test, from all the String type properties such as email,businessUnit,userId

try this way for all the String type properties

       <property name="email">
          <column name="Email"/>
        </property>

or you can try with java.lang.String also

       <property name="email" type="java.lang.String">
          <column name="Email"/>
        </property>

Upvotes: 1

Anders R. Bystrup
Anders R. Bystrup

Reputation: 16080

Hmmm, in your mapping file you have

<key-property name="businessUnit" column="BusinessUnit" type="string"/>
<key-property name="userID" column="UserID" type="string"/>

That should be ...type="java.lang.String"... instead, but most likely you really don't need it - Hibernate will make a (usually very good) educated guess.

Cheers,

Upvotes: 1

dimas
dimas

Reputation: 6073

AS I understand the problem in your code was caused by your User.hbm.xml mapping file. To be more precised by type="string" attribute of composite-id tab.

As I understand you don't need to put type attribute obligatory so try to skip it at all; hibernate should detect it automatically. I'm not sure in last sentece because I have not used composite keys, but there are a lot of examples where peoples don't define type explicitly.

Upvotes: 1

Johanna
Johanna

Reputation: 5303

In User.hbm.xml you have to use type="java.lang.String" (with a big 'S'). That's it.

Upvotes: 2

Related Questions