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"?>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段加入:
jta
在不集成Hibernate的环境下(例如使用JDBC的独立应用程序),在session-factory段加入:
thread
就可以解决这个问题。
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”。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
如何做好面试突击,规划学习方向?
面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。
学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。
我们搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
我们在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。
学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。
我们搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
[外链图片转存中…(img-25a7nOoY-1713376944217)]
我们在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!