【问题标题】:Hibernate-Component class not found未找到 Hibernate-Component 类
【发布时间】:2016-05-21 05:39:55
【问题描述】:

我不明白这里发生了什么。这是我得到的例外:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in URL [file:/C:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/demoBancoWeb/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.component.PojoComponentTuplizer]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
.
.
.
Caused by: java.lang.ClassNotFoundException: co.edu.icesi.demo.modelo.ConsignacionesId
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1139)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:193)
    at org.hibernate.mapping.Component.getComponentClass(Component.java:138)
    ... 42 more

堆栈跟踪的第一块是 Hibernate 异常,第二块跟踪是与我的类的关系。

这个类,ConsignacionesId 是 Hibernate 自动生成的多属性 ID。

这是我的休眠 cfg.xml:

<?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>
  <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
  <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
  <property name="hibernate.connection.password">admin</property>
  <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/banco</property>
  <property name="hibernate.connection.username">postgres</property>
  <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
  <property name="hibernate.search.autoregister_listeners">false</property>
  <property name="show_sql">true</property>
  <mapping resource="co/edu/icesi/demo/modelo/Clientes.hbm.xml"/>
  <mapping resource="co/edu/icesi/demo/modelo/Cuentas.hbm.xml"/>
  <mapping resource="co/edu/icesi/demo/modelo/TiposUsuarios.hbm.xml"/>
  <mapping resource="co/edu/icesi/demo/modelo/TiposDocumentos.hbm.xml"/>
  <mapping resource="co/edu/icesi/demo/modelo/Consignaciones.hbm.xml"/>
  <mapping resource="co/edu/icesi/demo/modelo/Usuarios.hbm.xml"/>
  <mapping resource="co/edu/icesi/demo/modelo/Retiros.hbm.xml"/>

    <mapping resource="co/edu/icesi/demo/modelo/Consultas.hbm.xml"/>

 </session-factory>
</hibernate-configuration>

最后,这是我由 Hibernate 生成的类:

如您所见,ConsignacionesId 就在那里。 任何帮助表示赞赏。

【问题讨论】:

  • 你的所有类都编译正确了吗?
  • 是的,他们做到了。我找到了一个解决方案,但它似乎不是很持久。我将“modelo”类文件夹添加到构建路径中并且它起作用了。我完全不知道为什么会这样。
  • 检查您是否发布了您的全部异常堆栈?
  • 不,我发布了初始异常,然后发布了包含与我的类相关的问题的堆栈跟踪。我跳过了 Hibernate 的内部结构。

标签: java hibernate


【解决方案1】:

好的,我在 hibernate hbm.xml 文件中丢失了我的类的完整路径。

这个:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 01-feb-2016 18:51:34 by Hibernate Tools 4.0.0 -->
    <hibernate-mapping>
        <class name="Clientes" table="clientes" schema="public">
            <id name="cliId" type="long">
                <column name="cli_id" precision="10" scale="0" />
                <generator class="assigned" />
            </id>
            <many-to-one name="tiposDocumentos" class=
.
.
.

必须是这样的:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 01-feb-2016 18:51:34 by Hibernate Tools 4.0.0 -->
    <hibernate-mapping>
        <class name="co.edu.icesi.demo.modelo.Clientes" table="clientes" schema="public">
            <id name="cliId" type="long">
                <column name="cli_id" precision="10" scale="0" />
                <generator class="assigned" />
            </id>
            <many-to-one name="tiposDocumentos" class="

.
.
.

所以我只是粘贴了“co.edu.icesi.demo.modelo”。在我生成的所有类之前,它起作用了。

我希望这对某人有所帮助。

这是因为在“Hibernate Code Generation Cofigurations...”中我没有使用“package”字段。

“destiny”文件夹应该只有 src/main/java。

不要自己创建包含生成的类的包。就我而言,不要创建 co.edu.icesi.demo.modelo

该路径位于“Hibernate Code Generation Configurations...”的“package”字段内

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2021-12-27
    • 2017-06-06
    • 2017-08-21
    • 2019-07-18
    相关资源
    最近更新 更多