【问题标题】:Exception : org.hibernate.MappingException: Unknown entity异常:org.hibernate.MappingException:未知实体
【发布时间】:2025-12-23 20:15:13
【问题描述】:

我在我的应用程序中使用 Spring 3 和 Hibernate 4。在运行时,我遇到了异常。

注意:我在网上搜索过,我确定我的实体注释的导入是正确的,并且组件扫描在 xml 文件中的速度也很好。

01:51:15,184 错误 [STDERR] org.hibernate.MappingException:未知实体:com.voya.sid.entity.ApplicationEntity 01:51:15,184 org.hibernate.internal.SessionFactoryImpl.getEntityPersister 的错误 [STDERR](SessionFactoryImpl.java:1146) 01:51:15,184 org.hibernate.internal.SessionImpl.getEntityPersister 的错误 [STDERR](SessionImpl.java:1358) 01:51:15,184 org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId 的错误 [STDERR](AbstractSaveEventListener.java:116) 01:51:15,184 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId 的错误 [STDERR](DefaultSaveOrUpdateEventListener.java:206) 01:51:15,184 org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId 的错误 [STDERR](DefaultSaveEventListener.java:55) 01:51:15,184 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient 的错误 [STDERR](DefaultSaveOrUpdateEventListener.java:191) 01:51:15,184 org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate 的错误 [STDERR](DefaultSaveEventListener.java:49) 01:51:15,184 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate 的错误 [STDERR](DefaultSaveOrUpdateEventListener.java:90) 01:51:15,184 org.hibernate.internal.SessionImpl.fireSave 的错误 [STDERR](SessionImpl.java:683) 01:51:15,184 org.hibernate.internal.SessionImpl.save 的错误 [STDERR](SessionImpl.java:675) org.hibernate.internal.SessionImpl.save(SessionImpl.java:671)中的 01:51:15,184 错误 [STDERR]


以下是我的应用程序类别:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="SID_APP_INSTANCE")
public class ApplicationEntity {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="APP_INSTANCE_KEY")
    // other code
 }

@Component
@Service("ApplicationService")
public class ApplicationServiceImpl implements ApplicationService{

public ApplicationDao getApplicationDao() {
    return applicationDao;
}
public void setApplicationDao(ApplicationDao applicationDao) {
    this.applicationDao = applicationDao;
}

@Autowired
private ApplicationDao applicationDao;

   // some methods..

  }

----------------------------------- ----------------------------------.

@Component
@Repository("ApplicationDao")
 public class ApplicationDaoImpl implements ApplicationDao {

@Autowired
   private SessionFactory sessionFactory;


public SessionFactory getSessionFactory() {
    return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

public void addApplication(ApplicationEntity app) {
    try{
        System.out.println("Inside ApplicationDaoImpl..My Life : My Session :> "+ this.sessionFactory.getCurrentSession());
        this.sessionFactory.getCurrentSession().save(app);
    }catch (Exception e) {
        System.out.println("Exception in saving..");
        e.printStackTrace();
    }

}
  // other methods...
  }

根上下文.xml:

    <bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
 <tx:annotation-driven/>

   <context:component-scan base-package="com" />
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <!-- <property name="dataSource" ref="dataSource" /> -->
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>

       </bean>

添加 Hibernate.cfg.xml

<hibernate-configuration>
 <session-factory>
  <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
  <property name="hibernate.connection.url">jdbc:oracle:thin:@host:50004:abc</property>
  <property name="hibernate.connection.username">user</property>
  <property name="hibernate.connection.password">pass</property>
  <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
  <property name="hibernate.default_schema">abc</property>
  <property name="show_sql">true</property>
  <property name="hibernate.c3p0.min_size">5</property>
  <property name="hibernate.c3p0.max_size">20</property>
  <property name="hibernate.c3p0.timeout">300</property>
  <property name="hibernate.c3p0.max_statements">50</property>
  <property name="hibernate.c3p0.idle_test_period">3000</property>
  <property name="hibernate.validator.apply_to_ddl">false</property> 
  <property name="hibernate.validator.autoregister_listeners">false</property>
</session-factory>
</hibernate-configuration>

请帮忙。

【问题讨论】:

  • 提供有关您的 hibernate.cfg.xml 文件的更多详细信息。
  • @Keval : 有问题添加
  • xml文件中没有你的ApplicationEntity类的映射。
  • 表名是否有效且存在于数据库中??如果要创建架构,可以设置 hbm2ddl.auto=create
  • ApplicationEntity(with package name) 将此代码添加到您的 root-context.xml 文件中

标签: java spring hibernate hibernate-mapping


【解决方案1】:

也许对你有帮助:

在您的 root-context.xml 文件中添加以下代码。

<value>ApplicationEntity(with package name)</value> 

【讨论】:

    【解决方案2】:

    还可以尝试在 root-context.xml 文件中添加以下内容。

    <context:annotation-config />
    

    【讨论】:

      【解决方案3】:

      您需要执行类似的操作来实现上下文扫描以获取要提取的注释。

      <bean id="sessionFactory"
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
      p:dataSource-ref="dataSource"
      p:configLocation="WEB-INF/classes/hibernate.cfg.xml"
      p:packagesToScan="com.example.model"
      />
      

      【讨论】:

        【解决方案4】:

        将以下内容添加到您的 xml:

        <bean id="sessionFactory"
            class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="packagesToScan">
                <list>
                    <value>your.package.name.here</value>
                </list>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                    <prop key="hibernate.show_sql">true</prop>
                </props>
            </property>
        </bean>
        
        <tx:annotation-driven transaction-manager="transactionManager" />
        
        <bean id="transactionManager"
            class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
        

        【讨论】: