0

My Hibernate version is 4.3
My Class Career has a composite primary key CareerId, and when use hibernate tool reveng.xml to generate, class Career and class CareerId is generated, but only Career.hbm.xml is generated, CareerId.hbm.xml is not gnereated.

And in database, only Career table is existed, no CareerId table is existed.

From the stacktrace,

Caused by: org.hibernate.MappingException: component class not found: CareerId

is this mean the error is due to no CarrerId.hbm.xml is generated?

My Hibernate.config.xml is as follow:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
    <property name="hibernate.connection.password">!QAZ2wsx</property>
    <property name="hibernate.connection.url">jdbc:sqlserver://localhost:65064;databaseName=Testing</property>
    <property name="hibernate.connection.username">sa</property>
    <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
    <property name="hibernate.search.autoregister_listeners">true</property>
    <property name="hibernate.validator.apply_to_ddl">false</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <mapping resource="Staff.hbm.xml" />
    <mapping resource="Career.hbm.xml" />
</session-factory>
</hibernate-configuration>

my Career.hbm.xml is as follow:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 2019?~7??14?? ?W??02:43:26 by Hibernate Tools 4.3.5.Final -->
<hibernate-mapping>
<class name="Career" table="Career" schema="dbo" catalog="Testing" optimistic-lock="version">
    <composite-id name="id" class="CareerId">
        <key-property name="staffNo" type="serializable">
            <column name="Staff_No" />
        </key-property>
        <key-property name="dateToRank" type="timestamp">
            <column name="Date_To_Rank" length="23" />
        </key-property>
        <key-property name="rankAbbr" type="serializable">
            <column name="Rank_Abbr" />
        </key-property>
    </composite-id>
    <property name="title" type="serializable">
        <column name="title" />
    </property>
    <property name="createdBy" type="serializable">
        <column name="Created_By" />
    </property>
    <property name="createdDate" type="timestamp">
        <column name="Created_Date" length="23" />
    </property>
</class>
</hibernate-mapping>

My staff.hbm.xml is as follow:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 2019?~7??14?? ?W??02:43:26 by Hibernate Tools 4.3.5.Final -->
<hibernate-mapping>
<class name="Staff" table="Staff" schema="dbo" catalog="Testing" optimistic-lock="version">
    <id name="staffNo" type="serializable">
        <column name="StaffNo" />
        <generator class="assigned" />
    </id>
    <property name="name" type="serializable">
        <column name="Name" />
    </property>
    <property name="createdDate" type="timestamp">
        <column name="CreatedDate" length="23" />
    </property>
    <property name="createdBy" type="serializable">
        <column name="CreatedBy" />
    </property>
</class>
</hibernate-mapping>

The whole error message is

    Exception in thread "main" java.lang.ExceptionInInitializerError
at output.Test1.main(Test1.java:17)
Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.component.PojoComponentTuplizer]
at org.hibernate.tuple.component.ComponentTuplizerFactory.constructTuplizer(ComponentTuplizerFactory.java:101)
at org.hibernate.tuple.component.ComponentTuplizerFactory.constructDefaultTuplizer(ComponentTuplizerFactory.java:122)
at org.hibernate.tuple.component.ComponentMetamodel.<init>(ComponentMetamodel.java:81)
at org.hibernate.mapping.Component.getType(Component.java:180)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:322)
at org.hibernate.mapping.RootClass.validate(RootClass.java:271)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1360)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1851)
at output.HibernateUtil.buildSessionFactory(HibernateUtil.java:38)
at output.HibernateUtil.<clinit>(HibernateUtil.java:19)
... 1 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.hibernate.tuple.component.ComponentTuplizerFactory.constructTuplizer(ComponentTuplizerFactory.java:98)
... 10 more
Caused by: org.hibernate.MappingException: component class not found: CareerId
at org.hibernate.mapping.Component.getComponentClass(Component.java:141)
at org.hibernate.tuple.component.PojoComponentTuplizer.buildGetter(PojoComponentTuplizer.java:155)
at org.hibernate.tuple.component.AbstractComponentTuplizer.<init>(AbstractComponentTuplizer.java:64)
at org.hibernate.tuple.component.PojoComponentTuplizer.<init>(PojoComponentTuplizer.java:59)
... 15 more
Caused by: java.lang.ClassNotFoundException: CareerId
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:193)
at org.hibernate.mapping.Component.getComponentClass(Component.java:138)
... 18 more
user1169587
  • 1,104
  • 2
  • 17
  • 34

1 Answers1

0

by reference the post on Hibernate-Component class not found

the problem is solved.

The solution is need to add the package name before the class name in hbm.xml, like the following:

<class name="output.Career" table="Career" schema="dbo" catalog="Testing" optimistic-lock="version">
    <composite-id name="id" class="output.CareerId">
user1169587
  • 1,104
  • 2
  • 17
  • 34