- 浏览: 155165 次
- 性别:
- 来自: 保定
文章分类
最新评论
-
hellostory:
高级查询的查询参数放哪里?
SSH超实用分页实现(原创开源)! -
topbox163:
不错。。。。。。。。。
拥有属于自己的SVN(Google SVN)(更新版) -
shiyangxt:
忧_零 写道不知道这个问题LZ是否解决了啊,今天同样碰到这个问 ...
救助贴???关于Mysql插入二进制文件 -
忧_零:
不知道这个问题LZ是否解决了啊,今天同样碰到这个问题了,错误相 ...
救助贴???关于Mysql插入二进制文件 -
sornor:
不错!总算对servlet和jsp之间的关系有了了解了!感谢感 ...
JSP与Servlet的关系和实例分析(转帖)
**************************hibernate错误集锦******************************
1、java.lang.noclassdeffounderror:org/hibernate/cfg/hbmbinder$secondPass
把hibernate-annotations.jar删除即可。
2、entity class not found
但是对应的类确实存在,检查hbm.xml中的class对应的类名和实体的路径是否一致
3、Remember that ordinal parameters are 1-based!
HQL语句错误
4、hibernate Unknown entity class 错误
在hibernate.cfg.xml中添加<mapping resource="packagename.Info.hbm.xml"/>
1问:Hibernate初始化时总是报错:java.lang.NoClassDefFoundError
Hibernate初始化时出现出错代码:
java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException
答:这是新手常见问题。是因为使用默认设置时,Hibernate文档里指出的Hibernate库不完整,缺少ehcache.jar(用于支持Ehcache的相关文件)。配置中加入以上文件,就可以避免初始化时出现java.lang.NoClassDefFoundError:net/sf/ehcache/CacheException异常。
2问:Hibernate报错:"Not binding factory to JNDI, no JNDI name configured"
运行下列程序:
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration().addClass(Person.class);
......
出现错误码:
12:15:34,250 INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at net.sf.Hibernate.connection.UserSuppliedConnectionProvider.getConnection (UserSuppliedConnectionProvider.java:32)
at net.sf.Hibernate.impl.BatcherImpl.openConnection(BatcherImpl.java:289)
at net.sf.Hibernate.impl.SessionImpl.connect(SessionImpl.java:3361)
at net.sf.Hibernate.impl.SessionImpl.connection(SessionImpl.java:3321)
at net.sf.Hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:66)
at net.sf.Hibernate.loader.Loader.prepareQueryStatement(Loader.java:779)
at net.sf.Hibernate.hql.QueryTranslator.iterate(QueryTranslator.java:864)
at net.sf.Hibernate.impl.SessionImpl.iterate(SessionImpl.java:1618)
at net.sf.Hibernate.impl.QueryImpl.iterate(QueryImpl.java:27)
at com.Hibernate.person.TestQueryPerson.main(TestQueryPerson.java:28)
Exception in thread "main"
答:修改main函数,为该程序指定配置文件即可。
public static void main(String[] args) throws Exception {
File file=new File("./Hibernate.cfg.xml");
Configuration conf = new Configuration().configure(file);
......
配置文件如下。
<?xml version="1.0"?>
<!DOCTYPE Hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://Hibernate.sourceforge.net/Hibernate-mapping-3.0.dtd">
<!--
This mapping demonstrates content-based discrimination for the
table-per-hierarchy mapping strategy, using a formula
discriminator.
-->
<Hibernate-mapping package="org.Hibernate.test.array">
<class name="A" lazy="true">
<id name="id">
<generator class="native"/>
</id>
<array name="bs" cascade="all" fetch="join">
<key column="a_id"/>
<list-index column="idx"/>
<one-to-many class="B"/>
</array>
</class>
<class name="B" lazy="true">
<id name="id">
<generator class="native"/>
</id>
</class>
</Hibernate-mapping>
3问:使用开发工具Elipse,运行时总报java.lang.NoClassDefFoundError: org/ Hibernate/Session异常
使用Elipse,所用包是hibernte 3,发现在Action中每次执行到:
session=HibernateSessionFactory.currentSession();
时,出现java.lang.NoClassDefFoundError: org/Hibernate/Session异常,如下:
java.lang.NoClassDefFoundError: org/Hibernate/Session
Hibernate3.Hibernate.ExcuteClass.search(ExcuteClass.java:17)
Hibernate3.Hibernate.ExcuteClass.test3(ExcuteClass.java:13)
Hibernate3.Hibernate.Svlt.doGet(Svlt.java:50)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)[/b]
答:这是初学者常见问题,原因是没有导入hibernate 3.jar包,虽然把hibernate 3.jar写入了Classpath,但部署的时候却没有拷贝到lib下面,可以手动拷贝进入。
4问:执行如下方法时,发生"No CurrentSessionContext configured"错误
执行如下方法时,发生"No CurrentSessionContext configured"错误:
Public static Session currentSession() {
try {
System.out.println("HibernateUtil.currentSession() - start");
return getSessionFactory().getCurrentSession();
} catch (HibernateException ex) {
System.out.println("HibernateUtil.currentSession() - failed due to " + ex);
throw ex;
}
}
答:这个错误是由配置文件引起。在集成Hibernate的环境下(例如Jboss),在session-factory段加入:
<property name="Hibernate.current_session_context_class">jta</property>
在不集成Hibernate的环境下(例如使用JDBC的独立应用程序),在session-factory段加入:
<property name="Hibernate.current_session_context_class">thread</property>
就可以解决这个问题。
5问:移植Jboss 4下配置Hibernate出错
在Tomcat 5下配置Hibernate成功,但移植到Jboss 4下出现了很多问题。已在deploy目录下放置了Hibernate-service.xml和Hibernate.cfg.xml文件,但启动服务器仍然报错 如下。
16:56:54,046 ERROR [URLDeploymentScanner] Incomplete Deployment listing:
Packages waiting for a deployer:
org.Jboss.deployment.DeploymentInfo@24bd343 { url=file:/C:/Downloads/temp/Jboss-
4.0.0/server/default/deploy/Hibernate.cfg.xml }
deployer: null
status: null
state: INIT_WAITING_DEPLOYER
watch: file:/C:/Downloads/temp/Jboss-4.0.0/server/default/deploy/Hibernate.cfg
.xml
altDD: null
lastDeployed: 1113987414046
lastModified: 1113987414046
mbeans:
Incompletely deployed packages:
org.Jboss.deployment.DeploymentInfo@24bd343 { url=file:/C:/Downloads/temp/Jboss-
4.0.0/server/default/deploy/Hibernate.cfg.xml }
deployer: null
status: null
state: INIT_WAITING_DEPLOYER
watch: file:/C:/Downloads/temp/Jboss-4.0.0/server/default/deploy/Hibernate.cfg
.xml
altDD: null
lastDeployed: 1113987414046
lastModified: 1113987414046
mbeans:
答:这是在Jboss中使用Hibernate的常见问题。在Jboss的某个war包中使用Hibernate应该将Hibernate.cfg.xml文件放置到%war_dir%WEB-INF/classes中,但是Hibernate的factory仍然可能会提示Hibernate.cfg.xml not found。此问题解决方法如下。
由于Jboss已经集成了Hibernate,在deploy"lib文件夹中hibernate2.jar的文件已经存在了一个jar包,所以实际的war中可能使用了shar的hibernate2.jar,由于ClassLoader只会在hibernate2.jar的同级及上级目录中寻找hibernate.cfg.xml,所以导致Hibernate并没有去查找%war_dir%WEB-INF/classes中的Hibernate.cfg.xml文件。删除deploy/lib下的hibernate2.jar或者使用绝对路径指定Hibernate.cfg.xml可以解决。
除非有其他需求,否则在Jboss下部署Hibernate与在Tomcat下是一样的,并不需要加其他配置文件。
6问:到底在哪里使用cascade="..."?
答:cascade属性并不是多对多关系一定要用的,用了它只是插入或删除对象时更方便一些,只要在cascade的源头上插入或删除,所有cascade的关系就会被自动插入或删除。其中unsaved-value是个很重要的属性,Hibernate是通过这个属性来判断这个对象应该“save”还是“update”,如果这个对象的id是unsaved-value,那说明这个对象不是persistence object,要save(insert);如果id是非unsaved-value,那说明这个对象是persistence object(数据库中已存在),只要update就行了。
7问:到底在哪里使用inverse="true"
答:inverse属性默认是false,就是说关系的两端都来维护关系。这个意思就是说,如有3个表:Student、Teacher和TeacherStudent,Student对象和Teacher对象是多对多关系,这个关系由TeacherStudent表来表现。
那么什么时候插入或删除TeacherStudent表中的记录呢。用Hibernate时,不会显式的对TeacherStudent表操作,对TeacherStudent的操作是Hibernate自动做的。Hibernate就是hbm文件中指定的是“谁”维护关系,在插入或删除时,就会触发对关系表的操作。前提是“谁”这个对象已经知道这个关系,就是说关系另一头的对象已经set或是add到“谁”这个对象里来。
前面说过inverse默认是false,就是关系的两端都维护关系,对其中任一个操作都会触发对表的操作。当在关系的一头,如Student中的bag或set中用了inverse="true"时,就代表关系是由另一端维护的(Teacher)。就是说当插入Student时,不会操作TeacherStudent表,即使Student已经知道了关系。只有Teacher插入或删除时才会触发对关系表的操作。所以,关系的两头都用inverse="true"是不对的,会导致任何操作都不触发对关系表的操作。当两端都是inverse="false"或是default值时,在代码中对关系显式的维护也是不对的,会导致在关系表中插入两次关系。
8问:Cascade和Inverse有什么区别?
答:可以这样理解,Cascade定义的是关系两端对象到对象的级联关系;而Inverse定义的是关系和对象的级联关系。
9问:在删除操作时报错:net.sf.Hibernate.ObjectDeletedException:deleted object would be re-saved by cascade (remove deleted object from associations)
答:要删除关系的一头时(如,要删除一个已经和Student对象有关联的Teacher对象),当tx.commit()时才会抛出这个异常。防止出现这个异常的方法如下。
在Student端不用cascade。
或是用cascade的话,就显式的删除对像中的关系。
在Teacher端要用cascade。
10问:出现net.sf.Hibernate.HibernateException: identifier of an instance of my. MyObject altered from N to N异常
答:这个异常不是多对多关系中常遇到的,但是这个异常的提示容易让人混淆。这是因为在Java对象中,id定义和hbm文件的不一样。如Java中用long,而hbm中用type= "integer"。11问:为什么在向数据库中插入长字符串时候部分自动丢失
在向数据库中增加一条新的条目时,发现如果文字(有英文字母,也有汉字)数量特别大,超过1000个,则每次通过Hibernate,向一个String类型的字段中增加数据时,只有几百个字可以增加进去,其他的自动丢失了。
答:这是由于字段长度设置不合理造成的。可以根据字符串实际长度考虑使用Text、LongText、或者Blob等字段类型。不同数据库的字段类型稍有不同,可以参考相关手册。另外需要注意的是一个汉字占用两个字节长度。
12问:为什么采用Hibernate的批量删除方法来删除大批量的记录数据时速度特别慢
答:在使用Hibernate版本2.X时,不推荐采用Hibernate的批量删除方法来删除大量记录。原因是,Hibernate会执行1条查询语句,另外还有满足条件的多条删除语句,而不是一次执行一个删除语句,所以当待删除的数据很多时,会有很大的性能瓶颈。而对于Hibernate 3.0以上的版本,则不存这个问题。
13问:升级Hibernate 3后在导入hbm映射文件时为什么非常非常慢
原先在Hibernate 2中,程序的速度是非常快的。当环境顺利从Hibernate 2升级到Hibernate 3后,发布时在Tomcat的控制台中发现:Hibernate 3装载hbm映射文件时非常慢,差不多10秒钟才能装载一个hbm文件。
答:通过在Hibernate的源代码中设置断点,可以发现执行效率低下的代码在org.hibernate.cfg.Configuration文件中的第240行:
addInputStream( new FileInputStream( xmlFile ) );
而addInputStream函数中又包含:
org.dom4j.Document doc = xmlHelper.createSAXReader( "XML InputStream", errors, entityResolver ).read( new InputSource( xmlInputStream ) );
跟踪org.hibernate.util.XMLHelper中的函数createSAXReader可以得出结论,问题的症结出在这一条语句:
org.dom4j.Document doc = xmlHelper.createSAXReader()
可以判断这是在XML文件装载初始化时发生的错误,仔细检查XML文件,可以发现这是XML的第一行声明dtd的错误,因为以前使用的是Hibernate 2,所以hbm文件的dtd指向的是版本2,而升级Hibernate 3后,没有把老的hbm映射文件换成版本3。在更换为3版本后,此问题得到解决。
14问:为什么Hibernate 3中的HQL无法查询汉字
使用同样的代码和配置文件,在Hibernate 2上完全没有问题,在Hibernate 3中,使用如下HQL查询,无法得到正确的结果集:
String hql = "from story where title like '%汉字%'";
Query q = session.createQuery(hql);
但用下面的HQL查询,却可以得到正确结果集:
String hql = " from story where title like '%english%'";
Query q = session.createQuery(hql);
答:如果采用的是拼接HQL的方式,从Hibernate 2升级到Hibernate 3确实会出现汉字乱码问题。在控制台中可以看到,SQL的汉字部分变成了乱码:
[DEBUG] 2005-08-14 14:33:58 org.hibernate.SQL - "select story0_.content from story as story0_ where story0_.title like '%&–°é—&&`¨&'
在Hibernate中,查询时应尽量使用占位符的写法(如下),这样既可以避免乱码问题,又可以避免潜在的SQL注入攻击:
getHibernate().find("from story where title like ? ", "%汉字%")
15问:Hibernate 3中如何获得库表所有字段的名称
答:可以使用以下的程序获得。
Configuration conf = new Configuration();
conf.configure();
Iterator iter = conf.getTableMappings();
while ( iter.hasNext() ) {
Table table = ( Table ) iter.next();
System.out.println(table.getName());
Iterator ics = table.getColumnIterator();
while (ics.hasNext()){
Column col = (Column) ics.next();
System.out.println(col.getName());
}
}
16问:错误代码:ObjectNotFoundException: No row with the given identifier exists
答:在以下几种情况下,该错误可能会发生。
当试图使用session.load()方法装载一个未被代理的对象,或者访问一个超出范围的代理对象时。
当装载一个未被正确取得的映射时。
当未被外键约束的外键字段中含有非法值时。
检查装载使用的主键Id,并验证外键关系,以确定数据库中已经存在相应的约束关系。坚持“在一个Session中只处理一个事务”的原则。因为当在单一Session中使用多个事务时很容易犯错。尤其注意,在一个HibernateException已经抛出后不要再操作Session。
17问:错误代码:InvalidObjectException: Could not find a SessionFactory named: null
答:这个错误在以下几种情况下经常发生。
试图序列化一个已经失效的Hibernate Session,然后在另外一个虚拟机中进行反序列化。
类装载器被重置,例如在未重启的application server或者Web container中重新部署程序。在使用Tomcat时会经常遇到这个问题,这是因为application server中一般使用JNDI来存储SessionFactory,而在Tomcat或其他一些Web容器中,则是通过在context重载时,关闭HttpSession序列化来实现的。这种实现方式会引起这个错误发生。
18问:错误代码:org.hibernate.HibernateException: CGLIB Enhancement failed: <classname>
答:Hibernate 3的默认方式是把所有类通过代理方式来进行延迟加载。如果代码中的类有一个私有无参的构造器的话,Hibernate将无法在运行时将项目代码中的类作为子类装载。为了避免这个错误,类中的构造器函数至少应该在包内可见。
19问:为什么在Hibernate中添加、删除、修改一个对象或Collection,但是数据库中实际上没有任何变化
答:这个问题经常会困扰初学者。这是因为如果没有使用Hibernate的自动事务处理,则必需显式的提交事务,操作才会在数据库中执行。
20问:为什么保存一个父对象,而它的关联对象没有自动储存到数据库里
答:关联对象必需显式的调用session.save()(或session.persist()),或者在关联的映射文件中加入cascade="all"或cascade="save-update"(或cascade="persist")才能够自动关联执行。
发表评论
-
Java入门编程实例
2008-06-03 16:38 792php的学习先告一段落了,现在拿出近几天看的视频教 ... -
java基础进阶(文件列表,线程,线程组)编程实例(4篇)
2008-06-09 19:59 1081此处刊登代码均测试通过,完全准确! import j ... -
闭关贴!(含Java实践经验)
2008-06-16 11:32 745由于下周就考试 ... -
JSP与Servlet的关系和实例分析(转帖)
2008-06-18 16:39 3303JSP是Servlet的扩展,在没有J ... -
JSP环境配置全解!
2008-06-30 12:26 835实现JSP文件环境配置除了MyEclipse外,最 ... -
JSF搭建完成!(源码)
2008-07-07 12:07 1125今天搭建了我的第一个J ... -
Struts搭建完成!(源码)
2008-07-08 17:07 1400今天又搭好了我的第一个Struts框架,虽然觉有些复杂。但是我 ... -
Java连接数据库(mysql,sqlsever,Oracle,access)的调用函数!
2008-07-09 20:34 1784Java连各种数据库容易混淆,所以总结一下: oracle: ... -
实现Java连接mysql(源码)!
2008-07-10 22:14 3760Java连接mysql数据库,代码经过运行准确无误。 下面为实 ... -
Hibernate搭建成功!(源码)
2008-07-12 12:00 919昨天晚上搭建了我的第一个Hibernate框架。感觉挺爽的! ... -
MyEclipse内的Tmocat启动异常解决方案
2008-07-13 18:51 1030在我们平常使用MyEclipse运行项目的时候,往往只需要启动 ... -
Struts+DAO框架搭建完成!(源码)
2008-07-13 21:32 916今天做了这个Struts+DAO框架,可以说是又向SSH迈了一 ... -
一个折磨我一下午的编程问题
2008-07-14 20:36 666今天下午搭Struts+DAO+Hibernate遇到一处错误 ... -
搭SSH时遇到的问题,已解决!
2008-07-16 18:46 759今天下午搭SSH,由于MyEclipse版本的不同,所以在搭的 ... -
JS验证框架的使用方法
2008-07-26 17:01 1103今天着重介绍的是JS验证框架在Java Web项目中的应用, ... -
搭建Servlet在线视频
2008-07-27 22:09 1045这个视频flash上传及在 ... -
快速实现国际化---插件ResourceBunbleEditor的使用
2008-07-29 16:33 1061最近发现一个非常好用的插件,这个插件可以使Java的Web项目 ... -
Java数据库连接池类源码
2008-07-30 21:41 1776环境:MyEclipse 数据库:mysql 首先新建 ... -
Common Dbutils组件的使用(源码)
2008-08-01 20:50 1365Common Dbutils是操作数据库的组件,对传统操作数据 ... -
Java测试Mysql数据库的最大连接数
2008-08-07 21:55 1491Java测试Mysql数据库的最大连接数类: import ...
相关推荐
在进行Hibernate框架的初始化过程中,可能会遇到`java.lang.NoClassDefFoundError`异常,特别是当错误提示指向`net/sf/ehcache/CacheException`时。这种错误通常发生在类路径中缺失必要的库文件时。在本例中,错误...
Java编程过程中会遇到各种错误,这些错误通常可以分为编译错误、运行时错误和逻辑错误。下面我们将逐一探讨这些常见的Java错误及其原因和解决方法。 1. **标识符错误**:在Java中,标识符必须遵循特定规则,例如不...
16. **空指针异常** (`NullPointerException`):数据库连接配置错误,检查`hibernate.cfg.xml`中的数据源配置。 17. **数据插入异常** (`GenericJDBCException: could not insert`): 检查是否已创建表,是否有数据...
Java编程过程中,开发者经常会遇到各种错误,这些错误可能源于语法错误、运行时问题、资源管理不当或是环境配置错误等。以下是一些常见的Java错误及其可能的原因和解决方法: 1. **非法表达式开始**:这通常是由于...
Java编程过程中会遇到各种错误,这些错误通常分为编译错误和运行时错误。下面是对一些常见Java错误及其可能原因的详细解释: 1. **非法表达式开始**:这通常是由于语法错误,例如丢失括号导致的。确保所有的开启...
本资源摘要信息主要总结了WEB开发中常见的报错处理方法,涵盖了Hibernate、JSP、Struts等多个软件开发中的错误处理技巧。这些知识点对于初学者和初级开发者来说非常有价值,可以帮助他们在开发中快速解决问题。 1. ...
此外,`<init-param>`元素用于初始化ActionServlet,如`config`参数指向了struts.xml配置文件的路径,而`debug`和`detail`参数则分别设置了调试级别和详细级别,这对于开发过程中的错误排查至关重要。 #### Spring...
### Java面试题集锦知识点详解 #### 一、选择题知识点 **1. 构造函数的特性** - **选项A**: 正确。构造函数的名称必须与类名相同,这是构造函数的一个基本特点。 - **选项B**: 正确。Java允许在一个类中定义多个...
《JAVA案例开发集锦》是一本专为Java开发者设计的实战指南,涵盖了众多Java编程的典型应用场景和解决方案。这本书深入浅出地展示了Java在实际项目中的应用,是提高编程技能和解决问题能力的重要参考资料。标签“JAVA...
书中会介绍如何使用try-catch-finally语句块来捕获和处理异常,以及如何自定义异常类,确保程序在遇到错误时能优雅地运行。 三、集合框架 Java集合框架包括List、Set、Queue和Map等接口及其实现类。通过案例,你将...
这通常是由于在`struts-config.xml`配置文件中的处理器类配置错误所导致的。 **原因分析:** 原始配置: ```xml <controller processorClass="com.xj.requestprocessor.MyProcessor"></controller> ``` 应更改为...
3. **异常处理**:理解如何使用try-catch-finally语句处理程序运行时可能出现的错误,以及异常类的层次结构。 4. **集合框架**:List、Set、Map接口及其实现类(ArrayList、LinkedList、HashSet、HashMap等)的使用...
Java面试笔试集锦是针对Java开发人员准备的重要资源,它涵盖了多套公司常用来测试候选人技术能力的面试和笔试题目。这些题目旨在检验应聘者的Java编程基础、面向对象设计、数据结构、算法、多线程、JVM原理、数据库...
Java案例开发集锦是一个汇集了各种Java编程实例的资源库,旨在帮助开发者深入理解和实践Java编程语言的各种特性、设计模式以及常见问题的解决方案。这个压缩包文件可能包含了多个子文件,每个子文件都是一个独立的...
3. **异常处理**:Java异常处理机制是其强大之处,通过try-catch-finally语句块,可以有效地捕获和处理程序运行时可能出现的错误。 4. **集合框架**:Java集合框架包括接口(如List、Set、Queue)和实现类(如...
这份"java自总结面试集锦(3)"涵盖了Java技术栈的关键知识点,旨在帮助求职者或开发者准备Java面试,提升自己的技术水平。以下是对这些核心概念的详细解读: 1. **基础语法**:Java的语法与C++类似,但更注重安全性...
3. **谨慎使用异常**: 异常处理应主要用于错误处理,而非作为常规的控制流程。异常处理涉及对象创建和堆栈跟踪,对性能有负面影响。尽量避免在可预见的正常执行路径上使用异常。 4. **避免重复初始化变量**: Java会...
2. **与Java生态兼容**:JSP是Java生态系统的一部分,可以无缝集成Spring、Hibernate等框架,构建复杂的后端系统。 3. **扩展性**:通过使用自定义标签库和JavaBeans,可以创建可重用的组件,提高开发效率。 在"JSP...
这份名为"JAVA-FAQ.rar_The Java FAQ_java编程"的压缩包提供了一个Java编程的常见问题解答集锦,帮助开发者解决他们在编程过程中可能遇到的疑惑。"JAVA FAQ.pdf"是其中的主要文档,包含了丰富的知识内容。 首先,这...