(hibernate4)org.hibernate.MappingException:未知实体 [英] (hibernate4) org.hibernate.MappingException: Unknown entity
问题描述
我是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屋!