(异常)Hibernate的动态模型

解决办法

不用自带的Hibernate包 自己下载Hibernate包导入

最近出现这样的错误

2015-5-10 12:24:16 org.hibernate.annotations.common.Version <clinit>

INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}

2015-5-10 12:24:16 org.hibernate.Version logVersion

INFO: HHH000412: Hibernate Core {4.1.4.Final}

2015-5-10 12:24:16 org.hibernate.cfg.Environment <clinit>

INFO: HHH000206: hibernate.properties not found

2015-5-10 12:24:16 org.hibernate.cfg.Environment buildBytecodeProvider

INFO: HHH000021: Bytecode provider name : javassist

2015-5-10 12:24:16 org.hibernate.cfg.Configuration configure

INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml

2015-5-10 12:24:16 org.hibernate.cfg.Configuration getConfigurationInputStream

INFO: HHH000040: Configuration resource: /hibernate.cfg.xml

2015-5-10 12:24:16 org.hibernate.cfg.Configuration addResource

INFO: HHH000221: Reading mappings from resource: org/vo/UserTable.hbm.xml

2015-5-10 12:24:16 org.hibernate.cfg.Configuration doConfigure

INFO: HHH000041: Configured SessionFactory: null

2015-5-10 12:24:16 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)

2015-5-10 12:24:16 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

INFO: HHH000115: Hibernate connection pool size: 20

2015-5-10 12:24:16 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

INFO: HHH000006: Autocommit mode: false

2015-5-10 12:24:16 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

INFO: HHH000401: using driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] at URL [jdbc:sqlserver://localhost:1433;DatabaseName=Test9_4]

2015-5-10 12:24:16 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

INFO: HHH000046: Connection properties: {user=sa, password=****}

2015-5-10 12:24:17 org.hibernate.dialect.Dialect <init>

INFO: HHH000400: Using dialect: org.hibernate.dialect.SQLServerDialect

2015-5-10 12:24:17 org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService

INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)

2015-5-10 12:24:17 org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>

INFO: HHH000397: Using ASTQueryTranslatorFactory

%%%% Error Creating SessionFactory %%%%

java.lang.NullPointerException

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:247)

at org.hibernate.annotations.common.util.ReflectHelper.classForName(ReflectHelper.java:143)

at org.hibernate.annotations.common.reflection.java.JavaReflectionManager.classForName(JavaReflectionManager.java:117)

at org.hibernate.envers.configuration.RevisionInfoConfiguration.configure(RevisionInfoConfiguration.java:262)

at org.hibernate.envers.configuration.AuditConfiguration.<init>(AuditConfiguration.java:102)

at org.hibernate.envers.configuration.AuditConfiguration.getFor(AuditConfiguration.java:165)

at org.hibernate.envers.event.EnversIntegrator.integrate(EnversIntegrator.java:64)

at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:306)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744)

at org.util.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:34)

at org.test.HibernateTest.getCurrentSession(HibernateTest.java:26)

at org.test.HibernateTest.main(HibernateTest.java:13)

2015-5-10 12:24:17 org.hibernate.cfg.Configuration configure

INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml

2015-5-10 12:24:17 org.hibernate.cfg.Configuration getConfigurationInputStream

INFO: HHH000040: Configuration resource: /hibernate.cfg.xml

2015-5-10 12:24:17 org.hibernate.cfg.Configuration addResource

INFO: HHH000221: Reading mappings from resource: org/vo/UserTable.hbm.xml

2015-5-10 12:24:17 org.hibernate.cfg.Configuration doConfigure

INFO: HHH000041: Configured SessionFactory: null

2015-5-10 12:24:17 org.hibernate.cfg.Configuration$MappingsImpl addImport

INFO: HHH000071: Duplicate import: UserTable -> UserTable

%%%% Error Creating SessionFactory %%%%

org.hibernate.InvalidMappingException: Could not parse mapping document from resource org/vo/UserTable.hbm.xml

at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXml(Configuration.java:3409)

at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXmlQueue(Configuration.java:3398)

at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3386)

at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1341)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1731)

at org.util.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:73)

at org.util.HibernateSessionFactory.getSession(HibernateSessionFactory.java:55)

at org.test.HibernateTest.getCurrentSession(HibernateTest.java:26)

at org.test.HibernateTest.main(HibernateTest.java:13)

Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping UserTable

at org.hibernate.cfg.Configuration$MappingsImpl.addClass(Configuration.java:2574)

at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:172)

at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXml(Configuration.java:3406)

... 8 more

Exception in thread "main" java.lang.NullPointerException

at org.test.HibernateTest.saveUser(HibernateTest.java:38)

at org.test.HibernateTest.main(HibernateTest.java:14)

同学为类包的调用错误

原先我调用的为Hibernate 4.1 core Library和 Hibernate 4.1 Advanced Support librarys

这个是Myeclipse 10.7自带的

后来下载了hibernate-release-4.3.9.Final官网的这个

通过这样引入

复制压缩包下 C:\Users\Administrator\Desktop\hibernate-release-4.3.9.Final\lib\required的 所有必须jar包

然后

最后引入到下方类包统一起来

这样就把Hibernate官方版引入进去了

然后运行结果可以运行

运行结果如下

2015-5-10 12:34:00 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>

INFO: HCANN000001: Hibernate Commons Annotations {4.0.5.Final}

2015-5-10 12:34:00 org.hibernate.Version logVersion

INFO: HHH000412: Hibernate Core {4.3.9.Final}

2015-5-10 12:34:00 org.hibernate.cfg.Environment <clinit>

INFO: HHH000206: hibernate.properties not found

2015-5-10 12:34:00 org.hibernate.cfg.Environment buildBytecodeProvider

INFO: HHH000021: Bytecode provider name : javassist

2015-5-10 12:34:00 org.hibernate.cfg.Configuration configure

INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml

2015-5-10 12:34:00 org.hibernate.cfg.Configuration getConfigurationInputStream

INFO: HHH000040: Configuration resource: /hibernate.cfg.xml

2015-5-10 12:34:00 org.hibernate.cfg.Configuration addResource

INFO: HHH000221: Reading mappings from resource: org/vo/UserTable.hbm.xml

2015-5-10 12:34:00 org.hibernate.cfg.Configuration doConfigure

INFO: HHH000041: Configured SessionFactory: null

2015-5-10 12:34:00 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!)

2015-5-10 12:34:00 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH000401: using driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] at URL [jdbc:sqlserver://localhost:1433;databaseName=Test9_4]

2015-5-10 12:34:00 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH000046: Connection properties: {user=sa, password=****}

2015-5-10 12:34:00 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH000006: Autocommit mode: false

2015-5-10 12:34:00 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

INFO: HHH000115: Hibernate connection pool size: 20 (min=1)

2015-5-10 12:34:01 org.hibernate.dialect.Dialect <init>

INFO: HHH000400: Using dialect: org.hibernate.dialect.SQLServerDialect

2015-5-10 12:34:01 org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService

INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)

2015-5-10 12:34:01 org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>

INFO: HHH000397: Using ASTQueryTranslatorFactory

2015-5-10 12:34:02 org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000228: Running hbm2ddl schema update

2015-5-10 12:34:02 org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000102: Fetching database metadata

2015-5-10 12:34:02 org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000396: Updating schema

2015-5-10 12:34:02 org.hibernate.tool.hbm2ddl.TableMetadata <init>

INFO: HHH000261: Table found: Test9_4.dbo.userTable

2015-5-10 12:34:02 org.hibernate.tool.hbm2ddl.TableMetadata <init>

INFO: HHH000037: Columns: [id, username, password]

2015-5-10 12:34:02 org.hibernate.tool.hbm2ddl.TableMetadata <init>

INFO: HHH000108: Foreign keys: []

2015-5-10 12:34:02 org.hibernate.tool.hbm2ddl.TableMetadata <init>

INFO: HHH000126: Indexes: [pk_usertable]

2015-5-10 12:34:02 org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000232: Schema update complete

数据库类

这样数据就插入进去了

Test应当这么写

package org.test;
import java.util.*;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.util.HibernateSessionFactory;
//import org.vo.UserTale;
//import org.vo.UserTable;
public class HibernateTest {
	public Session session;
	public static void main(String[] args) {
		//HibernateTest ht = new HibernateTest();		//创建类对象
		//ht.getCurrentSession();
		//获得session对象
		Configuration cfg=new Configuration();
		SessionFactory sessionFactory=cfg.configure().buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction ts = session.beginTransaction();
		Map user = new HashMap();
		user.put("username", "yabber");
		user.put("password", "123456");
		session.save("org.vo.UserTable", user);
		ts.commit();

		//ht.saveUser();
		//ht.saveUser();							//插入一条记录
		//ht.updateUser();              			//修改该条记录
		//ht.queryUser();								//查看数据库结果
		//ht.deleteUser();              				//删除该条记录
		//System.out.println("删除该条记录后结果======");
		//ht.queryUser();								//查看数据库结果
		//ht.closeSession();             				//关闭session
	}

	//获得session方法
	public void getCurrentSession(){
		//调用 HibernateSessionFactory 的 getSession 方法创建 Session 对象
		session = HibernateSessionFactory.getSession();
	}
	//关闭session方法
	public void closeSession(){
		if(session!=null){
			HibernateSessionFactory.closeSession();	// 关闭Session
		}
	}

	//插入一条记录方法
	public void saveUser(){
		//保存一个UserTable对象
		Transaction ts = session.beginTransaction();
		Map user = new HashMap();
		user.put("username", "yabber");
		user.put("password", "123456");
		session.save("org.vo.UserTable", user);
		ts.commit();
	}

	//修改这条记录方法
	public void updateUser(){
		//更新一个UserTable对象
		Transaction ts = session.beginTransaction();
		Map user = new HashMap();
		user = (Map)session.get("org.vo.UserTable", 18);						// 获取id为18的记录
		user.put("password", "654321");
		session.update("org.vo.UserTable", user);
		ts.commit();
	}

	//查询数据库结果方法
	public void queryUser(){
		Query query = session.createQuery("from UserTable");    				//查询记录
		List list = query.list();
		for(int i=0;i<list.size();i++){
			Map user = (Map)list.get(i);
			System.out.println(user.get("username"));
			System.out.println(user.get("password"));
		}
	}

	//删除该条记录方法
	public void deleteUser(){
		Transaction ts = session.beginTransaction();
		Map user = new HashMap();
		user = (Map)session.get("org.vo.UserTable", 18);
		session.delete("org.vo.UserTable", user);
		ts.commit();
	}
}

UserTable.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class entity-name="org.vo.UserTable" table="userTable">
            <id name="id" column="id" type="integer">
                <generator class="identity"/>
            </id>
            <property name="username" type="string" column="username"/>
            <property name="password" type="string" column="password"/>
    </class>
</hibernate-mapping>

Hibernate.hbm.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">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <property name="hbm2ddl.auto">update</property>
        <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
        <property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=Test9_4</property>
        <property name="connection.username">sa</property>
        <property name="connection.password">123</property>
        <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <mapping resource="org/vo/UserTable.hbm.xml" />
    </session-factory>

</hibernate-configuration>

动态类是MAP映射 而非POJO映射

关于介绍MAP映射的文章

1 http://blog.csdn.net/meng2602956882/article/details/22914493

2 http://www.360doc.com/content/14/0329/19/281812_364737677.shtml

3 http://blog.csdn.net/opnmzxcvb/article/details/4785569

时间: 2024-10-08 16:30:41

(异常)Hibernate的动态模型的相关文章

菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样.假设每个建一个实体的话,那样实体会太多.假设分组抽象,然后继承,又不是特别有规律.鉴于这样的情况.就打算让用户自己配置要加入的字段,然后生成相应的表. 须要动态配置的部分实例: 上图仅仅是一小部分,一个一个组合起来大概有三百多.每一项相应一个实体,显然不好,就算是依照规律归归类还是有不少.于是就想到了在执行期来确定这些东西.開始有尝试过动态编译生成实体类,后来发如今数据存取上都存在问题,由于是后来生成的,所以仅仅能用反射来获取.这样

菜鸟学SSH(十七)——Hibernate动态模型+JRebel实现动态创建表

项目用的是SSH基础框架,其中有一些信息很类似,但又不尽相同.如果每一个建一个实体的话,那样实体会太多,如果分组抽象,然后继承,又不是特别有规律.鉴于这种情况,就打算让用户自己配置要添加的字段,然后生成对应的表. 需要动态配置的部分实例: 上图只是一小部分,一个一个组合起来大概有三百多.每一项对应一个实体,显然不好,就算是按照规律归归类还是有不少,于是就想到了在运行期来确定这些东西.开始有尝试过动态编译生成实体类,后来发现在数据存取上都存在问题,因为是后来生成的,所以只能用反射来获取,这样一来无

OSGI(面向Java的动态模型系统)

基本简介编辑 OSGI服务平台提供在多种网络设备上无需重启的动态改变构造的功能.为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方.OSGi联 OSGI 盟已经开发了为例如象HTTP服务器.配置.日志.安全.用户管理.XML等很多公共功能标准组件接口.这些组件的兼容性插件实现可以从进行了不同优化和使用代价的不同计算机服务提供商得到.然而,服务接口能够基于专有权基础上开发. 因为OSGi技术为集成提供了预建立和预测试的组件子系统,所以OSGi技

EFcore与动态模型

在开发商城系统的时候,大家会遇到这样的需求,商城系统里支持多种商品类型,比如衣服,手机,首饰等,每一种产品类型都有自己独有的参数信息,比如衣服有颜色,首饰有材质等,大家可以上淘宝看一下就明白了.现在的问题是,如果我程序发布后,要想增加一种新的商品类型怎么办,如果不在程序设计时考虑这个问题的话,可能每增加一个商品类型,就要增加对应商品类型的管理程序,并重新发布上线,对于维护来说成本会很高.有没有简单的方式可以快速增加新类型的支持?下面介绍的方案是这样的,首先把模型以配置的方式保存到配置文件中,在程

OSGI 面向Java的动态模型系统

OSGI (面向Java的动态模型系统) OSGi(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范.OSGi一方面指维护OSGi规范的OSGI官方联盟,另一方面指的是该组织维护的基于Java语言的服务(业务)规范.简单来说,OSGi可以认为是Java平台的模块层. OSGi服务平台向Java提供服务,这些服务使Java成为软件集成和软件开发的首选环境.Java提供在多个平台支持产品的可移植性.OSGi技术提供允许应用程序使用精炼.可重用

UML动态模型图简单介绍

UML动态模型图描述了系统动态行为的各个方面,包括用例图.序列图.协作图.活动图和状态图.下面就每种图做一个简单介绍: 用例图 用例图描述系统外部的执行者与系统提供的用例之间的某种联系.所谓用例是指对系统提供的功能的一种描述.执行者是使用用例的人或外部系统,二者之间的联系描述了“谁使用哪个用例”.用例图着重于从系统外部执行者的角度来描述系统需要提供哪些功能,并指明该执行者是谁.在用例图中,椭圆表示用例,小人表示执行者.下图所示为一个普通用户进入某系统的用例图,该图描述了当普通用户进入系统时,“普

数学建模学习笔记(第五章:6个动态模型-微分方程的建立与分析)

第五章:动态模型(微分方程建模) ·  预报与决策类型 ·  描述对象特征随时间或空间的演变过程: ·  分析对象特征的变化规律: ·  预报对象特征的未来特征: ·  研究控制对象特征的手段等. 这类题,要求的是一种趋势,描述一种变化过程,也可以称为预测.(属于动态) 1.    传染病模型 a)      问题描述:描述产染病的传播过程:分析受感染人数的变化规律:预报传染病高潮到来的时刻:预防传染病蔓延的手段:按照传播过程的一般规律,用机理分析方法建立模型:之后使用测试分析,确定最好的模型.

Spring+Hibernate实现动态SessionFactory切换

前面写了一篇关于动态切换Hibernate SessionFactory的文章 发现存在一些问题: 需要配置多个HibernateTransactionManager和多个Spring 切面 这样带来两个问题 1. 程序效率降低,因为Spring进行多次Advice的拦截 2. 如果其中一个SessionFactory连接出现问题,会导致整个系统无法工作 今天研究出一种新的方法来解决此类问题 1. 数据源及Hibernate SessionFactory配置: <?xml version="

spring hibernate实现动态替换表名(分表)

1.概述 其实最简单的办法就是使用原生sql,如 session.createSQLQuery("sql"),或者使用jdbcTemplate.但是项目中已经使用了hql的方式查询,修改起来又累,风险又大!所以,必须找到一种比较好的解决方案,实在不行再改写吧!经过3天的时间的研究,终于找到一种不错的方法,下面讲述之. 2.步骤 2.1 新建hibernate interceptor类 /** * Created by hdwang on 2017/8/7. * * hibernate拦