【问题标题】:(hibernate4) org.hibernate.MappingException: Unknown entity(hibernate4) org.hibernate.MappingException: 未知实体
【发布时间】:2012-12-04 11:33:40
【问题描述】:

我是Java EE的新手,请帮助!

以下代码使用struts2+hibernate4+oracle11g。运行此代码后,它给了我以下错误消息:

org.hibernate.MappingException: 未知实体

UserDetails.java

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

@Entity
@Table(name="users")
public class UserDetails {
    @Id
    private int id;
    private String passwd;
    public String getPasswd() {
        return passwd;
    }
    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    public void Update(){
        SessionFactory sessionFactory;
        ServiceRegistry serviceRegistry;

        Configuration configuration = new Configuration();
        configuration.configure();
        serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
        sessionFactory = configuration.buildSessionFactory(serviceRegistry);

        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.save(this);
        session.getTransaction().commit();
    }
}

hibernate.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="dialect">org.hibernate.dialect.Oracle10gDialect</property>
    <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
    <property name="connection.url">jdbc:oracle:thin:@192.168.1.2:1521:orcl</property>
    <property name="connection.username">steve</property>
    <property name="connection.password">steve</property>

    <property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>

    <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
    <property name="current_session_context_class">thread</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hbm2ddl.auto">create</property>
  </session-factory>

</hibernate-configuration>

表结构:

Create table Users (ID int primary key, passwd varchar(45));

【问题讨论】:

    标签: hibernate jakarta-ee struts2 oracle11g


    【解决方案1】:

    问题是你还没有将你的类定义为hiberante。

    在您的 session-factory 中添加以下几行:

    <property name="annotatedClasses">
        <list>
            <value>myPackage.UserDetails</value>
        </list>
    </property>
    

    【讨论】:

      【解决方案2】:

      你需要添加类:

      import javax.persistence.Entity;
      import javax.persistence.Id;
      import javax.persistence.Table;
      
      import org.hibernate.Session;
      import org.hibernate.SessionFactory;
      import org.hibernate.cfg.Configuration;
      import org.hibernate.service.ServiceRegistry;
      import org.hibernate.service.ServiceRegistryBuilder;
      
      @Entity
      @Table(name="users")
      public class UserDetails {
          @Id
          private int id;
          private String passwd;
          public String getPasswd() {
              return passwd;
          }
          public void setPasswd(String passwd) {
              this.passwd = passwd;
          }
          public int getId() {
              return id;
          }
          public void setId(int id) {
              this.id = id;
          }
      
          public void Update(){
              SessionFactory sessionFactory;
              ServiceRegistry serviceRegistry;
      
              Configuration configuration = new Configuration();
              configuration.addAnnotatedClass(UserDetails.class); //<-- Here, adds the class to the Hibernate configuration
              configuration.configure();
              serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
              sessionFactory = configuration.buildSessionFactory(serviceRegistry);
      
              Session session = sessionFactory.openSession();
              session.beginTransaction();
              session.save(this);
              session.getTransaction().commit();
          }
      }
      

      你肯定不想每次你想把东西保存到表中时都构造一个新的 Hibernate Configuration 和 SessionFactory,所以把东西从 Update 移到某个地方的 init 方法中。

      【讨论】:

      • 也可以在class="your-entity"中的hibernate配置xml文件中添加实体>
      【解决方案3】:

      缺少实体的休眠映射。或者,您可以在休眠配置文件中使用。 并定义 UserDetails.hbm.xml。我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-11
        • 2011-04-29
        • 1970-01-01
        • 2011-11-28
        • 2014-04-16
        • 2014-08-05
        • 2012-06-17
        相关资源
        最近更新 更多