(hibernate4)org.hibernate.MappingException:未知实体 [英] (hibernate4) org.hibernate.MappingException: Unknown entity

查看:124
本文介绍了(hibernate4)org.hibernate.MappingException:未知实体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是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;
导入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.configure();
serviceRegistry = new ServiceRegistryBuilder()。applySettings(configuration.getProperties())。buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);

会话会话= sessionFactory.openSession();
session.beginTransaction();
session.save(this);
session.getTransaction()。commit();




$ b hibernate.cfg.xml


 <?xml version ='1.0'encoding ='UTF-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC
- // Hibernate / Hibernate配置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>线程< / property>
< property name =hibernate.show_sql> true< / property>
< property name =hbm2ddl.auto>建立< / property>
< / session-factory>

< / hibernate-configuration>

表结构:

 创建表用户(ID int主键,passwd varchar(45)); 


解决方案

您需要添加类:

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

import org.hibernate.Session;
import org.hibernate.SessionFactory;
导入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.addAnnotatedClass(UserDetails.class); //< - 在这里,将类添加到Hibernate配置
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder()。applySettings(configuration.getProperties())。buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);

会话会话= sessionFactory.openSession();
session.beginTransaction();
session.save(this);
session.getTransaction()。commit();


$ / code $ / pre

你绝对不想构造一个新的Hibernate配置和SessionFactory,每次你想把一些东西保存到表中时,把所有东西从 Update 移动到某个init方法。


I am a newbie to Java EE, please help!

The following code used struts2+hibernate4+oracle11g. After I run this code, it gives me this error message:

org.hibernate.MappingException: Unknown entity

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>

Table Structure:

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

解决方案

You need to add the class:

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();
    }
}

You definitely do not want to construct a new Hibernate Configuration and SessionFactory each time you want to save something to the table, so move the stuff from Update to an init method somewhere.

这篇关于(hibernate4)org.hibernate.MappingException:未知实体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆