首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

错误:could not initialize proxy - the owning Session was closed

2013-09-11 
异常:could not initialize proxy - the owning Session was closed异常:could not initialize proxy - th

异常:could not initialize proxy - the owning Session was closed

异常:could not initialize proxy - the owning Session was closed

其实这个异常写的非常之清楚,就是会话关闭,无法对Hibernate实体进行操作。造成这样的情况有很多,什么书写错误啊,逻辑错误啊。

但就此说一下关于lazy机制:

延迟初始化错误是运用Hibernate开发项目时最常见的错误。如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它。如果在游离状态时才初始化它,就会产生延迟初始化错误。

下面把Customer.hbm.xml文件的<class>元素的lazy属性设为true,表示使用延迟检索策略:

<class name="mypack.Customer" table="CUSTOMERS" lazy="true">

当执行Session的load()方法时,Hibernate不会立即执行查询CUSTOMERS表的select语句,仅仅返回Customer类的代理类的实例,这个代理类具由以下特征:

(1) 由Hibernate在运行时动态生成,它扩展了Customer类,因此它继承了Customer类的所有属性和方法,但它的实现对于应用程序是透明的。
(2) 当Hibernate创建Customer代理类实例时,仅仅初始化了它的OID属性,其他属性都为null,因此这个代理类实例占用的内存很少。
(3)当应用程序第一次访问Customer代理类实例时(例如调用customer.getXXX()或customer.setXXX()方法), Hibernate会初始化代理类实例,在初始化过程中执行select语句,真正从数据库中加载Customer对象的所有数据。但有个例外,那就是当应用程序访问Customer代理类实例的getId()方法时,Hibernate不会初始化代理类实例,因为在创建代理类实例时OID就存在了,不必到数据库中去查询。

提示:Hibernate采用CGLIB工具来生成持久化类的代理类。CGLIB是一个功能强大的Java字节码生成工具,它能够在程序运行时动态生成扩展 Java类或者实现Java接口的代理类。关于CGLIB的更多知识,请参考:http://cglib.sourceforge.net/。

以下代码先通过Session的load()方法加载Customer对象,然后访问它的name属性:

cn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", sUsr, sPwd );

2. PostgreSQL(http://www.de.postgresql.org)pgjdbc2.jar
Class.forName( "org.postgresql.Driver" );
cn = DriverManager.getConnection( "jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName", sUsr, sPwd );

3. Oracle(http://www.oracle.com/ip/deploy/database/oracle9i/)classes12.zip
Class.forName( "oracle.jdbc.driver.OracleDriver" );
cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );

4. Sybase(http://jtds.sourceforge.net)jconn2.jar
Class.forName( "com.sybase.jdbc2.jdbc.SybDriver" );
cn = DriverManager.getConnection( "jdbc:sybase:Tds:MyDbComputerNameOrIP:2638", sUsr, sPwd );
//(Default-Username/Password: "dba"/"sql")

5. Microsoft SQLServer(http://jtds.sourceforge.net)
Class.forName( "net.sourceforge.jtds.jdbc.Driver" );
cn = DriverManager.getConnection( "jdbc:jtds:sqlserver://MyDbComputerNameOrIP:1433/master", sUsr, sPwd );

6. Microsoft SQLServer(http://www.microsoft.com)
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );
cn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master", sUsr, sPwd );

7. ODBC
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
Connection cn = DriverManager.getConnection( "jdbc:odbc:" + sDsn, sUsr, sPwd );

8.DB2(新添加)
Class.forName("com.ibm.db2.jdbc.net.DB2Driver");
String url="jdbc:db2://192.9.200.108:6789/SAMPLE"
cn = DriverManager.getConnection( url, sUsr, sPwd );

补充
Microsoft SQL Server series (6.5, 7.x and 2000) and Sybase 10

JDBC Name: jTDS
URL: http://jtds.sourceforge.net/
Version: 0.5.1
Download URL: http://sourceforge.net/project/showfiles.php?group_id=33291

语法:

Class.forName("net.sourceforge.jtds.jdbc.Driver ");
Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://host:port/database","user","password");
or
Connection con = DriverManager.getConnection("jdbc:jtds:sybase://host:port/database","user","password");
Postgresql

JDBC Name: PostgreSQL JDBC
URL: http://jdbc.postgresql.org/
Version: 7.3.3 build 110
Download URL: http://jdbc.postgresql.org/download.html

语法:

Class.forName("org.postgresql.Driver");
Connection con=DriverManager.getConnection("jdbc:postgresql://host:port/database","user","password");


IBM AS400主机在用的JDBC语法

有装V4R4以上版本的Client Access Express
可以在C:\Program Files\IBM\Client Access\jt400\lib
找到 driver 档案 jt400.zip,并更改扩展名成为 jt400.jar

语法

java.sql.DriverManager.registerDriver (new com.ibm.as400.access.AS400JDBCDriver ());
Class.forName("com.ibm.as400.access.AS400JDBCConnection");
con = DriverManager.getConnection("jdbc:as400://IP","user","password");

informix

Class.forName("com.informix.jdbc.IfxDriver").newInstance();

String url =

"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;

user=testuser;password=testpassword";


Lib:jdbcdrv.zip<br><br>Class.forName( "com.sybase.jdbc.SybDriver" )<br>url="jdbc:sybase:Tds:127.0.0.1:2638/asademo";<br>SybConnection connection= (SybConnection)DriverManager.getConnection(url,"dba","sql");<br>


补充两个
SAP DB
Class.forName ("com.sap.dbtech.jdbc.DriverSapDB");
java.sql.Connection connection = java.sql.DriverManager.getConnection ( "jdbc:sapdb://" + host + "/" + database_name,user_name, password)

InterBase
String url = "jdbc:interbase://localhost/e:/testbed/database/employee.gdb";
Class.forName("interbase.interclient.Driver");
//Driver d = new interbase.interclient.Driver (); /* this will also work if you do not want the line above */
Connection conn = DriverManager.getConnection( url, "sysdba", "masterkey" );

我也来补一个吧:HSqlDB

url:???? http://hsqldb.sourceforge.net/
driver:? org.hsqldb.jdbcDriver

连接方式有4种,分别为:
con-str(内存): jdbc:hsqldb.
con-str(本地): jdbc:hsqldb:/path/to/the/db/dir
con-str(http): jdbc:hsqldb:http://dbsrv
con-str(hsql): jdbc:hsqldb:hsql://dbsrv


错误2、Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.?
原因:你在尝试打开一个克隆连接,
有两种解决办法: 每个数据库的连接在执行完毕后,关闭,
第二,在连接时,判断是否已经有连接存在,有则使用现成的连接。

也可以在连接字符串中加入SelectMethod=cursor,即写成这样:“jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=bugzero_db”

或者改用
Microsoft SQLServer(http://jtds.sourceforge.net)
Class.forName( "net.sourceforge.jtds.jdbc.Driver" );
cn = DriverManager.getConnection( "jdbc:jtds:sqlserver://MyDbComputerNameOrIP:1433/master", sUsr, sPwd );

Hibernate常见错误:
Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence.
如果出现这行错误说明你的xml配置文件有不规范的字符,检查下。

net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml


如果出现这行错误说明你的hibernate的XML配置文件有错\r

net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found


如果出现这行错误说明hibernate的XML配置文件没有找到,你应该把XML文件放在与你的类文件同个目录下,本文中是放在hibernate\classes\hibernate\目录下,也就是跟Hello_Bean.class类文件一起。

net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean


如果出现这行错误说明你的xml文件里设置的字段名name的值与Hello_Bean.java类里的getXXX或setXXX方法不一致。

net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver
如果出现这行错误说明你的MYSQL驱动没有加进JB库里或者不在CLASSPATH里。

no bean specialed.
出错了,jsp页面报错。
原因是html:select 标签 中 option bean is null/.

Set不能加同一实体
在保存数据的时候循环添加一PO数据到Set,居然最后Set的size()为1。各实体设置不同数据啊,只是没Id.
原因是这个PO以前自己实现了Comparable .只比较Id,

HibernateSystemException: SQL insert,update or delete failed
hibernate级联保存或更新时可能会出这个错误
原因是由于子实体的主键设置了不符合保存更新的数据.

No persister for错误
这个错误说的是no persister for java.lang.Integer;
映射文件未添加肯定不是这个问题了。
那只有映射文件出错。
锁定了关联的id;
PO里面写的关联ID,而建表看不出问题。而且映射文件里面基本上看不出来。
出现No persister for错误后一般是3个情况:
1hbm.xml文件特殊类未制定类型。
2cfg.xml文件未添加类的hbm.xml文件名。
3PO和 hbm类映射不匹配。?

net.sf.hibernate.LazyInitializationException: Failed to lazily initialize a collection - no session or session was closed
hibernate最常见错误.
Lazy为true
session关闭后调用延迟加载属性.

在session关闭之前如果调用该属性,会加载.
或者是使用Hibernate.Initalize();

BigDecimal对象属性映射出错
这个问题是不小心造成的.
属性映射应该加上 length="2"指定2位小数,或者几位小数,小数位数在0-19之间

property value with CGLIB 错误
比较常见的hibernate错误了.
当PO属性为原始类型(int,double...)时,数据库纪录为null,调出PO时由于这些属性必须有值而出现错误.

把属性值设置为对象属性解决.

hibernate出错
在configure.buildSessionFactory()时java.nullpointException.
在eclipse里没问题,但部署在tomcat里就出问题了,
是由于包冲突了。
还有个可能就是configure(path),path不对。

是由于eclipse的class loader和tomcat不同,在tomcat里,不能有两个一样一起加载。
eclipse里却是指定jar的。

?

常见错误:
Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence.

如果出现这行错误说明你的xml配置文件有不规范的字符,检查下。

net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml


如果出现这行错误说明你的hibernate的XML配置文件有错

net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found


如果出现这行错误说明hibernate的XML配置文件没有找到,你应该把XML文件放在与你的类文件同个目录下,本文中是放在hibernate\classes\hibernate\目录下,也就是跟Hello_Bean.class类文件一起。

net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean


如果出现这行错误说明你的xml文件里设置的字段名name的值与Hello_Bean.java类里的getXXX或setXXX方法不一致。

net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver
如果出现这行错误说明你的MYSQL驱动没有加进JB库里或者不在CLASSPATH里。
调试出现 net.sf.hibernate.MappingException 很有可能是由于
类库文件没有找到,类库的版本不同,他的名字会不同 要重新配置 setenv.bat
类库的路径。

?

?

自己遇到的hibernate常见错误
1>

错误显示: net.sf.hibernate.PropertyValueException: not-null property references a null or transient value: com.Order.customer

部分原文件:( customer 和 order 类关系:一对多关联)

Order.hbm.xml …………… < many-to-one???????? name = "customer"???????? column = "CUSTOMER_ID"???????? class = "com.Customer"???????? not-null = "true"???????? cascade = "save-update"??????????? /> 执行文件:
………

Session session = sessionFactory.openSession();

??? Transaction tx = null;

??? try {

????? // Create some data and persist it

???? tx = session.beginTransaction();

?
???? Customer customer=new Customer();

???? customer.setName("Jack");

????

???? Order order=new Order();

???? order.setOrderNumber("Jack_Order001");

???????? session.save(customer);

???????? session.save(order);

?? tx.commit();

原因分析:因为在执行代码中,没有将 customer 和 order 类一对多关联起来,若单独持久化两个类: session.save(customer);session.save(order); 则在保存 order 的时候,由于 CUSTOMER_ID是与 customer类外键,因此无法读取 customer_id, 而在 order.hbm.xml 中指定其不为空,则产生了以上错误。

问题解决: not-null = "true" 改为:not-null="false" 虽然程序无问题,但order表 CUSTOMER_ID为空,不符合逻辑。应该将指定其一对多的关联。 order.setCustomer(customer);?????? customer.getOrders().add(order);?? 2〉 错误显示: RROR SessionImpl:2400 - Could not synchronize database state with session net.sf.hibernate.exception.GenericJDBCException: could not delete collection: [com.Customer.orders#2]
部分原文件:

Session session = sessionFactory.openSession();

??? Transaction tx = null;

??? try {

????? tx = session.beginTransaction();

????? Customer customer=(Customer)session.load(Customer.class,new Long(3));

????? session.delete(customer);

????? tx.commit();

原因分析:因为 cascade默认值为 none,所以当删除customer时,不会自动删除与其关联的order对象。 问题解决:添加语句 cascade = "delete"?? 3>
错误显示:

17:24:34,992 ERROR JDBCExceptionReporter:58 - [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]在关键字 'ORDER' 附近有语法错误。 17:24:34,992? WARN JDBCExceptionReporter:57 - SQL Error: 156, SQLState: HY000 17:24:35,002 ERROR JDBCExceptionReporter:58 - [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]在关键字 'ORDER' 附近有语法错误。 17:24:35,022? WARN JDBCExceptionReporter:34 - SQL Warning: 0, SQLState: net.sf.hibernate.exception.GenericJDBCException : could not initialize collection: [com.Customer.orders#2]
部分原文件: order.hbm.xml

< hibernate-mapping >?? < class name = "com.Order" table = "ORDER" >????? < id name = "id" type = "long" column = "ID" >???????? < generator class = "increment" />?????? </ id >??? < property name = "orderNumber" type = "string" >???????? < column name = "ORDER_NUMBER" length = "15" />?????? </ property >???????????? < many-to-one???????? name = "customer"???????? column = "CUSTOMER_ID"???????? class = "com.Customer"???????? outer-join = "true"????????? />
原因分析:因为 order 表在 SQL 2000 数据库中已经定义了,如果用户在定义了 order 表,并且程序对该表进行连接等操作就会出错

问题解决:将 引用 order 处改为 [order]

< class name = "com.Order" table = "[ORDER]" >?? 4> net.sf.hibernate.exception.SQLGrammarException : Could not save object???? at net.sf.hibernate.exception.SQLStateConverter.convert( SQLStateConverter.java:58 )???? at net.sf.hibernate.exception.JDBCExceptionHelper.convert( JDBCExceptionHelper.java:29 )???? at net.sf.hibernate.impl.SessionImpl.convert( SessionImpl.java:4131 )???? at net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier( SessionImpl.java:794 )???? at net.sf.hibernate.impl.SessionImpl.save( SessionImpl.java:749 )???? at com.BusinessService.saveCategoryWithCascade( BusinessService.java:54 )???? at com.BusinessService.test( BusinessService.java:104 )???? at com.BusinessService.main( BusinessService.java:109 ) Caused by: java.sql.SQLException : [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'CATEGORIES' 无效。 5〉
错误显示: net.sf.hibernate.MappingException : Resource: Add valid path not found

部分原文件: hibernate.hbm.xml

< hibernate-configuration >?? < session-factory >???? < property name = "connection.username" > sa </ property >???? < property name = "connection.url" > jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test </ property >???? < property name = "dialect" > net.sf.hibernate.dialect.SQLServerDialect </ property >???? < property name = "myeclipse.connection.profile" > MSSQL </ property >???? < property name = "connection.password" > hheryh </ property >???? < property name = "connection.driver_class" > com.microsoft.jdbc.sqlserver.SQLServerDriver </ property >???? < mapping resource = "Add valid path" /> </ session-factory >
原因分析:找不到有效的 xml 文件

问题解决:将所有配置文件都加到 resource 里

将< mapping resource = "Add valid path" />改为 < mapping resource = "com/Customer.hbm.xml" /> < mapping resource = "com/Order.hbm.xml" /> 6〉 错误显示 net.sf.hibernate.MappingException : Error reading resource: com/Customer.hbm.xml???? at net.sf.hibernate.cfg.Configuration.addResource( Configuration.java:340 )???? at net.sf.hibernate.cfg.Configuration.doConfigure( Configuration.java:1027 )???? at net.sf.hibernate.cfg.Configuration.doConfigure( Configuration.java:983 )???? at net.sf.hibernate.cfg.Configuration.configure( Configuration.java:911 )???? at net.sf.hibernate.cfg.Configuration.configure( Configuration.java:897 )???? at com.BusinessService.<clinit>( BusinessService.java:17 ) Caused by: net.sf.hibernate.MappingException : duplicate import: Customer???? at net.sf.hibernate.cfg.Mappings.addImport( Mappings.java:85 )???? at net.sf.hibernate.cfg.Binder.bindClass( Binder.java:126 )???? at net.sf.hibernate.cfg.Binder.bindRootClass( Binder.java:221 )???? at net.sf.hibernate.cfg.Binder.bindRoot( Binder.java:1256 )???? at net.sf.hibernate.cfg.Configuration.add( Configuration.java:253 )???? at net.sf.hibernate.cfg.Configuration.addInputStream( Configuration.java:289 )???? at net.sf.hibernate.cfg.Configuration.addResource( Configuration.java:337 )???? ... 5 more 部分原文件 :hibernate.hbm.xml <? xml version = '1.0' encoding = 'UTF-8' ?> <! DOCTYPE hibernate-configuration PUBLIC?????????? "-//Hibernate/Hibernate Configuration DTD 2.0//EN"?????????? "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd" >?? <!-- Generated by MyEclipse Hibernate Tools.?????????????????? --> < hibernate-configuration >?? < session-factory >???? < property name = "connection.username" > sa </ property >???? < property name = "connection.url" > jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test </ property >???? < property name = "dialect" > net.sf.hibernate.dialect.SQLServerDialect </ property >???? < property name = "myeclipse.connection.profile" > MSSQL </ property >???? < property name = "connection.password" > hheryh </ property >???? < property name = "connection.driver_class" > com.microsoft.jdbc.sqlserver.SQLServerDriver </ property >???? < mapping resource = "com/Customer.hbm.xml" /> </ session-factory >?? </ hibernate-configuration >??
主程序:

static{

???? try{

????? // Create a configuration based on the properties file we've put

?????? Configuration config = new Configuration();

?????? config.addClass(Customer.class);

????? // Get the session factory we can use for persistence

????? sessionFactory = config

????? .configure()

????? .buildSessionFactory();

??? }catch(Exception e){e.printStackTrace();}

?
? }

解决方法: config.addClass(Customer.class);
sessionFactory = config.configure().buildSessionFactory();

原因分析: hibernaet 配置文件有两种格式,一种是 xml 格式,一种是普通的 .property 格式 .

在 1.2 版本中,编译时自动会在 path 路径中查找 property 格式的配置文件。但不会查询 xml 格式的配置文件,因此需要在程序中手动添加 config.configure() ,但此时就不要加载了。

上面的程序 加载了一次 config.configure() ,又映射了一次,所以出错。

?
解决方法:

若配置文件为 xml 格式的,程序编写如下:

// Create a configuration based on the properties file we've put

?????? Configuration config = new Configuration();

???????????? // Get the session factory we can use for persistence

????? sessionFactory = config

????? .configure()

.buildSessionFactory();

?
若配置文件为 property 格式的,程序编写如下:

// Create a configuration based on the properties file we've put

?????? Configuration config = new Configuration();

?????? config.addClass(Customer.class);

????? // Get the session factory we can use for persistence

????? sessionFactory = config.buildSessionFactory();


hibernate常见错误及解决方法
hibernate 的自动生成工具
class,?mapping?file?and?DDL
1.?Middlegen
是用来从DB中已存在的表,生成相应的mapping?file.?可以下载一个老外的middlegen的例子。
http://sourceforge.net/project/showfiles.php?group_id=40712
调用Middlegen很简单,例子中的middlegen自动生成ant指令如下
?????????appname="${name}"
?????????prefsdir="${src.dir}"
?????????gui="${gui}"
?????????databaseurl="${database.url}"
?????????initialContextFactory="${java.naming.factory.initial}"
?????????providerURL="${java.naming.provider.url}"
?????????datasourceJNDIName="${datasource.jndi.name}"
?????????driver="${database.driver}"
?????????username="${database.userid}"
?????????password="${database.password}"
?????????
??????>
?????????????????destination="${build.gen-src.dir}"
????????????package="${name}.hibernate"
??????/>
??
然后会有一个GUI,给我们专门设计各种表与表之间的关系(一对一,一对多以及单向双向关系)。需要说明的是,middlegen生成的代码没有直接写mapping?file灵活性好,所以生成的mapping?file有时还需要我们去修改。
2.?XDoclet
它是用来从java文件自动生成hbm文件的,不过我们需要在java代码中写一些规定的tag,才能得到自动生成的hbm文件.
??????????destdir="src"
??????????excludedtags="@version,@author,@todo"
??????????force="true"
??????????verbose="true">
??????????
??????????????
??????
??????bobomail 阅读(744) 评论(20) 编辑收藏 收藏至365Key
评论
#re: hibernate 的自动生成工具 2005-04-30 16:43 caravarn
大内高手
Java到.NET的转换利器——JLCA
JLCA(Java Language Conversion Assistant)是VS.NET中内置的一套Java语言到.NET语言的转换工具,对于有这样需求的开发团队而言,这是一篇不可不读的文章。
OptimalJ实现MDA的实践
OptimalJ是另一个重量级的MDA工具。虽然OptimalJ目前只支持Java的MDA变换,但是其独树一帜的设计思想,仍然值得我们好好学习。
#re: hibernate 的自动生成工具 2005-08-10 14:11 bobo
一个不错的德jsp 分页工具的讨论
http://www.md.jxufe.cn/blog1/more.asp?name=xiaohuakai&id=406
#re: hibernate 的自动生成工具 2005-08-10 14:48 bobo
hibernate 分页工具的讨论
http://dev.csdn.net/develop/article/20/20764.shtm
#re: hibernate 的自动生成工具 2005-08-10 16:18 伯伯
hibernate 工具的介绍http://dev.csdn.net/article/71/71115.shtm
#re: hibernate 的自动生成工具 2005-08-11 14:51 caravarn
MiddleGen 工具介绍
http://dev.csdn.net/develop/article/53/53412.shtm
#re: hibernate 的自动生成工具 2005-08-11 17:01 caravarn
hibernate 库更新列表
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc
#re: hibernate 的自动生成工具 2005-08-15 18:10 caravarn
常见错误:
Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence.
如果出现这行错误说明你的xml配置文件有不规范的字符,检查下。
net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml
如果出现这行错误说明你的hibernate的XML配置文件有错
net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found
如果出现这行错误说明hibernate的XML配置文件没有找到,你应该把XML文件放在与你的类文件同个目录下,本文中是放在hibernateclasseshibernate目录下,也就是跟Hello_Bean.class类文件一起。
net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean
如果出现这行错误说明你的xml文件里设置的字段名name的值与Hello_Bean.java类里的getXXX或setXXX方法不一致。
net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver
如果出现这行错误说明你的MYSQL驱动没有加进JB库里或者不在CLASSPATH里。
#re: hibernate 的自动生成工具 2005-08-15 18:56 caravarn
调试出现 net.sf.hibernate.MappingException 很有可能是由于
类库文件没有找到,类库的版本不同,他的名字会不同 要重新配置 setenv.bat
类库的路径。
#re: hibernate 的自动生成工具 2005-08-15 19:16 caravarn
[ERROR] CodeGenerator - Error parsing XML: file:/C:/projects/hibernate/javasampl
e/(1) DOCTYPE root "null".>org.xml.sax.SAXParseException: Document root element "title
", must match DOCTYPE root "null".
生成文件的路径不对
#re: hibernate 的自动生成工具 2005-08-16 14:06 caravarn
Middlegen 工具 Hibernate辅助工具的功能,方便开发
#re: hibernate 的自动生成工具 2005-08-16 14:06 caravarn
http://www.matrix.org.cn/resource/article/1/1639_Hibernate-Script.html
#re: hibernate 的自动生成工具 2005-08-17 13:45 caravarn
Middlegen工具 连接数据库把数据结构导为 hbm2.xml 文件
Middlegen-Hibernate-r5configdatabase
mysql.xml 修改 数据库的连接文件
修改 Middlegen-Hibernate-r5uilder.xml 文件
执行ant 会出现 gui 的界面
#re: hibernate 的自动生成工具 2005-08-17 16:15 caravarn
hbm2java 配置 build.xml 文件
可以参考的文档
http://www.wnetw.com/jclub/technology/read.jsp?itemid=484
源文件路径
.........
........
.....
classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask"
classpathref="project.class.path"/>
--任务名称
-- 源文件目录
--输出目录
?


spring常见错误分析现象1:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''org.springframework.aop.support.DefaultPointcutAdvisor'' defined in null: Can''t resolve reference to bean ''txAdvice'' while setting property ''advice''; nested exception is
原因:缺少Spring开头的各种包,到Spring2.0 src中编译新的dist目录出来,拷贝全部的springxxx.jar到jpetstore/WEB-INF/lib下。OK。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
现象2:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''sessionFactory'' defined in resource [/WEB-INF/dataAccessContext-hibernate.xml] of ServletContext: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
原因:缺少jta.jar,OK
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
现象3:
java.lang.NoClassDefFoundError: org/dom4j/Attribute缺dom4j.jar
java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException
缺ehcache.jar
java.lang.NoClassDefFoundError: net/sf/cglib/core/KeyFactory
缺cglib-full.jar
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
现象4:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''sessionFactory'' defined in resource [/WEB-INF/dataAccessContext-hibernate.xml] of ServletContext: Initialization of bean failed; nested exception is net.sf.hibernate.MappingException: could not instantiate id generator
net.sf.hibernate.MappingException: could not instantiate id generator
原因:
hbm中id字段的定义为没有定义的sequesce,修改为inc
name="id"
type="string"
column="userid"
>
// 原来是sequence.
这样就可以了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
现象6:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''/shop/addItemToCart.do'' defined in ServletContext resource [/WEB-INF/petstore-servlet.xml]: Can''t resolve reference to bean ''petStore'' while setting property ''petStore''; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ''petStore'' is defined
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ''petStore'' is defined原因:
我使用Struts作为action,当然就不需要使用Spring WEB framework,因此也不需要与之配套的配置文件例如,petstore-servlet.xml,
还有remote-servlet.xml ,但是Spring仍旧加载此两个文件,没办法,只好将此两个文件挪动到别的地方,但是又出现找不到这两个
文件的IO异常,没办法,只好又拷贝回来,然后把文件内容晴空。
终于好用了。
原因就是,只要你在web.xml中定义了这个servlet,他就要去找此servlet名字对应的配置文件(servletname-servlet.xml),找不到就出错。ok,现在注释掉web.xml中名字为petstore的servlet定义和影色,删除petstore-servlet.xml文件,哈哈,这下不报告错误了。
同理,注释名字为remote的servlet,删除remote-servlet.xml后,重新启动tomcat,这下不报告任何错误了。呵呵。原来如此啊。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
现象:
java.lang.NullPointerException
srx.test.testhibernate.UserDAO.getAll(UserDAO.java:9)
srx.test.struts.action.UserAction.execute(UserAction.java:20)原因:
Action原来
UserDAO // 这个类OK
public class UserDAO extends HibernateDaoSupport {
public List getAll() {
return this.getHibernateTemplate().find("select aa from Account aa");
}
}
//这个类需要修改
public class UserAction extends ActionSupport {
UserDAO dao = new UserDAO();
List accounts = dao.getAll();
。。。
}
修改:
//UserDAO dao = new UserDAO(); WebApplicationContext wac = this.getWebApplicationContext();
UserDAO dao = (UserDAO) wac.getBean("userDAO"); 


Tags: Spring? error? Hibernate? struts?

原创文章如转载,请注明:转载自:飞扬部落编程仓库 : http://www.busfly.cn/csdn/

本文链接地址:http://www.busfly.cn/csdn/post/612.html

如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~

     

hibernate的常见错误解决方法示例!!!
1、
org.springframework.orm.ObjectRetrievalFailureException: Object of class [com.xindeco.myregister.pojo.MyRegisterInfo] with identifier [14]: not found
MyRegisterInfo在数据库没有identifier [14]对象。
2、
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: com.xindeco.myregister.pojo.MyRegisterInfo column: password (should be mapped with insert="false" update="false")
出错原因:password 和repassword同时对应数据库表中的password一列,同时update和insert都设为true。
xml文件如下:
??? <property name="password"
????????????????????????? type="java.lang.String"
????????????????????????? update="true"
????????????????????????? insert="true"
????????????????????????? access="property"
????????????????????????? column="password"
????????????????????????? length = "32"
????????????????????????? />

???????????????????????? <property name="repassword"
????????????????????????? type="java.lang.String"
????????????????????????? update="false"
????????????????????????? insert="false"
????????????????????????? access="property"
????????????????????????? column="password"
????????????????????????? length = "32"
????????????????????????? />
解决的方法:
将repassword的insert和update设为false。
3、
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed;
nested exception is org.hibernate.PropertyNotFoundException: Could not find a getter for ID in class
错误原因:hibernate的映射文件中ID是大写的,而pojo的类中id是小写的
注意事项:每个pojo的类都要继承abstractEntity,其中abstractEntity类有个ID的属性要重写
public abstract class AbstractEntity
??? implements Entity, BaseDTO {
??? abstract public long getID();
??? abstract public void setID(long id);
??? public int hashCode() {
??????? return (int)this.getID();
??? }
??? public boolean equals(Object obj) {
??????? if (obj == this) {
??????????? return true;
??????? }
??????? if (obj instanceof Entity) {
??????????? return this.getID() == ( (Entity) obj).getID();
??????? }
??????? return false;
??? }
}
4、
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition
错误原因:
在application.xml文件中deleteRegister方法以delete开头,并没有被设定为可更改的,应如下设置:
<!--为事物创建代理类,并指定方法的事物类型-->
<bean id="baseTxProxy" lazy-init="true" abstract="true" parent="baseTxProxy">
??? <property name="target">
????? <bean autowire="byName">
??????? <property name="baseDAO">
????????? <ref bean="GraAppDAO"/>
??????? </property>
????? </bean>
??? </property>
</bean>
因此this.getBean("GraAppService");是为了得到GraAppServicImpl类的实现。GraAppService是interface
public class GraAppServiceImpl extends BaseServiceImpl
??? implements GraAppService{
}
7、org.hibernate.hql.ast.QuerySyntaxException: Demand is not mapped. [from Demand where unitid = ? and needNum > usedNeedNum]
hibernate.cfg.xml没有配置Demand.hbm.xml文件的目录
8、org.springframework.jdbc.BadSqlGrammarException: Bad SQL grammar [] in task 'Hibernate operation'; nested exception is java.sql.SQLException: 列名 'id' 无效。
java.sql.SQLException: 列名 'name' 无效。
因为hibernate声明的id,name的columnid属性没有与数据库的字段对应,所以id,name无效。
9、java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:415)
at java.lang.Integer.parseInt(Integer.java:497)
at com.xindeco.business.service.impl.DemandServiceImpl.findDemandListByUnitId(DemandServiceImpl.java:33)
错误语句为
needNum = Integer.parseInt(demand.getNeedNum());
usedNeedNum = Integer.parseInt(demand.getUsedNeedNum());
因为demand.getUsedNeedNum()==null,无法转化为string 类型,
10、rg.apache.jasper.JasperException: /GraAppInfo/GraAppInfoNew.jsp(343,29) According to TLD, tag bean:write must be empty, but is not
错误的原因:
?????? <select name="politicsID" >
???????????? <option value="">请选择</option>
?????? <logic:notEmpty name="politicsList">
??????????????? <logic:iterate id="politics" name="politicsList">
?????? </logic:notEmpty>
?????? <option value="<bean:write name="politics" property="codeID"/>"><bean:write name="politics" property="codeName"/></option>
?????? </logic:iterate>
</select>
就因为少了/>
以后懂得通过查找字数,来检查错误
11、2006-04-26 13:27:54,812 ERROR com.xindeco.core.util.BeanUtils - bean property [Nation] copy failed
com.xindeco.core.exception.ConvertException: org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.String; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.String
beanUtil.beanCopy(grapojo,form,BizConstants.CONVERTER);
要求:
1、pojo类的属性只有与form属性名字相同,才能beancopy成功
2、pojo中属性是实体,在form中一定要用int,long表示
出现这错误的原因是pojo中的属性不是实体,而错误写成:
string
private String nation;应改成 private Syscode nation;
12、
2006-04-26 14:38:37,843 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@fa1b2d
java.lang.NullPointerException
at com.xindeco.business.web.action.GraAppAction.newone(GraAppAction.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
hibernate配置文件没改,程序找不到相应的类
??????? <many-to-one
??????????? name="FSUnit"
??????????? class="com.xindeco.business.pojo.EmployUnitBaseInfo"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="fSUnit"
??????? />
其实FSUnit对应的类应该是FSUnit
??????? <many-to-one
??????????? name="FSUnit"
??????????? class="com.xindeco.business.pojo.FSUnit"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="fSUnit"
??????? />
13、
org.hibernate.MappingException: An association from the table GraAppInfo refers to an unmapped class: com.xindeco.business.pojo.FSUnit
错误原因:hibernate.cfg.xml没有配置fsunit.hbm.xml文件的位置
14、
java.lang.ClassCastException: com.xindeco.business.dao.impl.GraAppDAOImpl
at com.xindeco.business.service.impl.GraAppServiceImpl.addGraduateApp(GraAppServiceImpl.java:16)
GraAppServiceImpl.java:16
第16行: GraAppDAO dao = (GraAppDAO) this.getBaseDAO();//其实得到的是GraAppDAOImpl
错误的原因是
public class GraAppDAOImpl
??? extends BaseDAOImpl {

}
没有实现GraAppDAO接口,正确的做法是
public class GraAppDAOImpl
??? extends BaseDAOImpl implements GraAppDAO {
}
先继承后实现
15、2006-04-27 08:38:54,078 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@1d6399b
java.lang.ClassCastException: com.xindeco.business.pojo.SysCode
at org.hibernate.type.StringType.set(StringType.java:26)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:63)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:40)
一般是因为hibernate声明类型和pojo类声明的类型不一样,并且前面已经出现了Hibernate: insert into TGraAppInfo (name, whereFrom, degree, college, speciality, studentRelTel, remark, higherEduLength, highSchool, studyResume, normalOrNot, proxyUnit, workPost, workPlace, studentAddress, studentPostNumber, nation, appStatus) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
的操作提示,查出错误的原因有:
??????? <many-to-one
??????????? name="demand"
??????????? class="com.xindeco.business.pojo.Syscode"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="demandID"
??????? />
???????? <property
??????????? name="appStatus"
??????????? type="int"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="appStatus"
??????????? length="10"
??????? />
应改为???
??????? <many-to-one
??????????? name="demand"
??????????? class="com.xindeco.business.pojo.Demand"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="demandID"
??????? />
<many-to-one
??????????? name="nation"
??????????? class="com.xindeco.business.pojo.SysCode"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="nation"
??????? />

16、
org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: com.xindeco.business.pojo.SysCode
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:626)
at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:570)
at
org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:482)
pojo类为:
public class GraAppInfo{
??? private College college;
}
action 类为
public class GraAppAction
??? extends BaseAction {
?????? public ActionForward add(ActionMapping mapping, ActionForm form,
???????????????????????????? HttpServletRequest request,
???????????????????????????? HttpServletResponse response) throws Exception {

??????? graInfo.setCollege(new College());\\必须从数据库找到college这个对象,而不能新生成
??????? graInfo.getCollege().setID(graForm.getCollegeID());
??????? graInfo.
我的异常网推荐解决方案:org.hibernate.MappingException: Association references unmapped class,http://www.myexception.cn/j2ee/326371.html

热点排行