HIbernate 5 测试连接出现的 Unknown entity异常
2017-03-06 17:42
363 查看
异常如下:
测试代码:
下面是获取 Hibernate5 sessionFactory 的正确代码
HIbernate 的版本为5.0.11
实体类
获取sessionFactory 的一个模板
测试代码:
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.jxust.model.Category; /** * 测试HIbernate * * @author Peng * @Date2017年3月6日下午4:09:22 */ public class TestHibernate { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init() { // 创建配置对象 Configuration cfg = new Configuration().configure(); // 创建服务注册对象 StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .applySettings(cfg.getProperties()).build(); // 创建会话工厂对象 sessionFactory = cfg.buildSessionFactory(serviceRegistry); // 会话对象 session = sessionFactory.openSession(); // 开启事务 transaction = session.beginTransaction(); } @After public void destory() { transaction.commit();// 提交事务 session.close();// 关闭对话 sessionFactory.close();// 关闭会话工厂 } @Test public void test() { Category c = new Category(); c.setId(232323); c.setType("衣服"); c.setHot(true); session.save(c); } }
下面是获取 Hibernate5 sessionFactory 的正确代码
private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init() { //创建配置对象 Configuration cfg = new Configuration().configure("hibernate.cfg.xml"); // 创建会话工厂对象 sessionFactory = cfg.buildSessionFactory(); // 会话对象 session = sessionFactory.openSession(); // 开启事务 transaction = session.beginTransaction(); } .....
org.hibernate.MappingException: Unknown entity: com.jxust.model.Category at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:783) at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1520) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:100) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:679) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:671) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:666) at com.jxust.TestHibernate.test(TestHibernate.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
HIbernate 的版本为5.0.11
<!--hibernate 包 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.0.11.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.2.4.Final</version> </dependency> <dependency> <groupId>org.hibernate.common</groupId> <artifactId>hibernate-commons-annotations</artifactId> <version>5.0.1.Final</version> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.0.Final</version> </dependency>
实体类
public class Category { /** * 主键 */ private int id; /** * 类型名称 */ private String type; /** * 类型是否为热点类型 */ private boolean hot; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getType() { return type; } public void setType(String type) { this.type = type; } public boolean isHot() { return hot; } public void setHot(boolean hot) { this.hot = hot; } @Override public String toString() { return "Category [id=" + id + ", type=" + type + ", hot=" + hot + "]"; } }
Category.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 2017-3-6 16:04:32 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <class name="com.jxust.model.Category" table="CATEGORY"> <id name="id" type="int"> <column name="ID" /> <generator class="assigned" /> </id> <property name="type" type="java.lang.String"> <column name="TYPE" /> </property> <property name="hot" type="boolean"> <column name="HOT" /> </property> </class> </hibernate-mapping>
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/shop</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">create</property> <mapping resource="com/jxust/model/Category.hbm.xml"/> </session-factory> </hibernate-configuration>
获取sessionFactory 的一个模板
import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.Configuration; public class HibernateSessionFactory { private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); // sessionFactory中用的是线程池技术 private static org.hibernate.SessionFactory sessionFactory; // sessionFactory:创建session的工厂 private static Configuration configuration = new Configuration(); static { // 类加载时初始化sessionFactory try { configuration.configure(); sessionFactory = configuration.buildSessionFactory(); //HIbernate 5 获取sessionFactory的方式 } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } private HibernateSessionFactory() { // 私有构造方法阻止new出对象,保证sessionFactory的单例 } public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get(); // 从线程池中拿session if (session == null || !session.isOpen()) { // 如果线程池是空的,或者session打开失败 if (sessionFactory == null) { rebuildSessionFactory(); // 如果sessionFactory是空的,那就再创建一次,和static部分一样的 } session = (sessionFactory != null) ? sessionFactory.openSession() : null; // sessionFactory不为空就创建一个session threadLocal.set(session); // 然后把这个session放到线程池中,下次再拿 } return session; } public static void rebuildSessionFactory() { try { configuration.configure(); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } } public static org.hibernate.SessionFactory getSessionFactory() {// 提供一个公共接口让外界获得这个单例sessionFactory return sessionFactory; } public static Configuration getConfiguration() { return configuration; } }
相关文章推荐
- hibernate中用findByExample方法出现Unknown entity: XXX异常
- 整合hibernate和spring框架测试事物出现的异常
- 异常记录001—hibernate 4.2.4 Final 测试出现Connection cannot be null when 'hibernate.dialect' not set
- 当权限正常以及连接正常时,WMI出现莫名COM异常的处理
- JDK6+Tomcat6+MyEclipse6,整合Struts,Spring,Hibernate出现异常
- MSSQL异常:JDBC连接SqlServer2000出现"Connection refused: connect"解决方案
- hibernate多对多删除被控方时出现异常解决
- JDBC连接SQLServer出现的异常
- 解决ASP.NET连接Oraclei数据库出现"无法加载DLL(oci.dll)"异常
- Hibernate3.2与Sql连接时出现的--java.lang.AbstractMethodError: com.microsoft.jdbc.base.BaseDatabaseMetaData.supportsGetGeneratedKeys()Z
- 使用 pywin32 中 adodbapi 连接数据库, 关闭连接后重新打开出现异常
- hibernate连接异常
- 关于hibernate连接sqlServer2000个人版出现的各种错误的方法汇总
- hibernate多对多出现的session关闭异常
- hibernate出现异常
- MSSQL异常:JDBC连接SqlServer2000出现"Connection refused: connect"解决方案
- Hibernate3.0连接DB2 9.0配置测试
- 解决连接MySQL时出现securityException异常,并且会有"That assembly does not allow partially trusted callers"的异常信息
- Hibernate查询,无数据正常,有数据出现java.lang.NullPointerException 异常
- 关于JDBC连接informix出现的异常:Unable to load locale categories