Hibernate常见的20个问题
hibernate内部测试题总结
hibernate内部测试题总结在Hibernate中,关于脏检查和刷新缓存说法正确的是(ab )。
A.当事务提交时,会发⽣脏检查B.Session的flush( )⽅法是刷新缓存的⽅法C.在执⾏Session的commit( )⽅法之前不会调⽤Session的flush( )⽅法D.编写代码时,调⽤commit( )⽅法之前要调⽤flush( )⽅法解析:在执⾏Session的commit()⽅法之前会调⽤Session的flush()⽅法 C错误 调⽤commit()⽅法都不是⼿动调⽤flush()⽅法使⽤HQL查询所有部门信息,以下正确的是( b)。
A.from DeptB.select * from cn.jbit.demo.entity.DeptC.select Dept from cn.jbit.demo.entity.Dept dD.select d from Dept d解析:HQL查询信息没有 *关于Query接⼝的list( )和iterate( )⽅法,说法正确的是( ad)。
A.执⾏list( )⽅法,查询所有符合条件的记录B.执⾏iterate( )⽅法,查询所有符合条件的记录C.执⾏list( )⽅法,查询出所有符合条件的主键值D.执⾏iterate ( )⽅法,查询出所有符合条件的主键值解析:list()是查询⼿游符合条件的记录 iterate()是查询出所有符合条件的5.在HQL中,关于Query接⼝绑定参数的⽅法,说法正确的是( ABCD)。
A.setParameter( )⽅法⽤于绑定任意类型的参数B.setParameter( )有重载的⽅法C.setProperties( )有重载的⽅法D.setProperties( )⽅法⽤于绑定命名参数6.在Hibernate中,关于以下映射配置,说法错误的是(D)。
<hibernate-mapping><class name="cn.jbit.hibernatedemo.entity.Emp" table="EMP" schema="scott"> <id name="empNo" column="EMPNO" type="ng.Integer"><generator class="assigned"/></id><property name="salary" type="ng.Double" column="SAL"/><property name="hireDate" type="java.util.Date"/><many-to-onename="dept"column="DEPTNO"class="cn.jbit.hibernatedemo.entity.Dept"/></class></hibernate-mapping>A.此配置信息描述了cn.jbit.hibernatedemo.entity.Emp类和EMP表的映射B.描述的是scott⽤户的EMP表C.<many-to-one>标签中的name属性值dept是cn.jbit.hibernatedemo.entity.Emp类的属性名D.<many-to-one>标签中的column属性值DEPTNO是dept表的主键名解析:D选项中column属性值deptNo是emp表中的外键列7.在Hibernate映射⽂件中,关于inverse属性说法正确的是(ACD)。
Hibernate常见面试题汇总
一. H ibern ate工作使用步骤?1.读取并解析配置文件2. 读取并解析映射信息,创建Ses sionF actor y3.打开Sess sion4. 创建事务Tran satio n5.持久化操作6. 提交事务7.关闭Sess ion 8. 关闭Se sstio nFact ory 二.Hib ernat e的查询方式有几种?(1)导航对象图检索方式。
根据已经加载的对象,导航到其他对象。
(2)OID查询方式。
根据对象的O ID来查询对象。
Se ssion的get()和loa d()方法。
(3)HQL查询方式。
HQ L是面向对象的查询语言,ses sion的find()方法用于执行HQL查询语句。
可以利用Q uery接口。
Q ueryquery = se ssion.crea teQue ry(“f rom C ustom er as c wh ere c.name=: c ustom erNam e”);quer y.set Strin g(“cu stome rName”,”张三”);Listresul tList = qu ery.l ist();(4)QBC查询方式。
这种API封装了基于字符串形式的查询语句。
Crit eriacrite ria = sess ion.c reate Crite ria(U ser.c lass);Cr iteri on cr iteri on1 = Expe ssion.like(“nam e”,”T%”);Crite rioncrite rion2 = Ex pessi on.eq(age,new I ntege r(30));cr iteri a =crite ria.a dd(cr iteri on1);crit eria = cr iteri a.add(crit erion2);L ist r esult List= cri teria.list();这种查询方式使用的较少,主要是在查询中需要用户输入一系列的查询条件,如果采用HQL查询代码会比较烦。
Hibernate常见错误
Hibernate常见错误1.错误:object references an unsaved transient instance - save the transient instance before flushing:com.xxxx.bean.java.Sysblog; nested exception isorg.hibernate.TransientObjectException: object references an unsavedtransient instance - save the transient instance before flushing:com.xxx.bean.java.Sysblog解决方法:没有可预期的实例,当然就要实例化对象咯2.错误:Exceptionobject references an unsaved transient instance - save the transient instance before flushing:src.persistent.Product......解决方法:原因没有为某对象进行set设置,如上边的这个就是某对象没有调用setProduct 3.错误:Illegal attempt to associate a collection with two open sessions......解决方法:(hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了。
sysblogarticle.setAmount(new Long(sysblogcommentService.selcom(sysblogarticle.getArticleid().toString()).size()));//通过文章id获取文章评论数sysblogarticle.setSysblogcomments(null);//关键sysblogarticleService.saveOrUpdate(sysblogarticle);//将文章中评论条数修改参考:[url=/blog/forum/17913][color=#0000ff]http://javaflas /blog/forum/17913[/color][/url]4.错误:Hbm映射文件都生成好后,改数据库增加了默认值(如:将某个字段值设为1),结果在插入的时候,数据库那边没有反应。
spring与hibernate集成的session问题
主要讨论Spring与Hibernate集成中的session问题1.通过getSession()方法获得session进行操作Java代码利用这种方式获得的session在方法执行结束之后不会自动关闭连接,也就是说我们必须通过session.close()或者releaseSession(session)来手动进行关闭,否则会造成内存泄露或者连接耗尽等问题。
手动关闭:Java代码如果对上述方法进行事务控制,那么spring框架会自动为我们关闭session,此种情况下再执行上述代码,会抛出如下异常:Java代码提示session已经关闭。
但是如果在代码中通过releaseSession(session)的方法来关闭session,则不会抛出异常。
releaseSession(session)方法的代码如下:Java代码也就是说它是通过SessionFactoryUtils的releaseSession方法来实现的:Java代码可见它内部会先进行判断。
查看getSession()方法的源码:Java代码getSession()方法内部通过它的一个重载方法getSession(boolean allowCreate )来实现,变量allowCreate是HibernateTemplate中的变量,默认值为true,也就是创建一个新的session。
如果我们调用getSession(false)来获得session,那么必须对其进行事务控制,原因是:(spring文档)Java代码也就是说,getSession()方法从当前事务或者一个新的事务中获得session,如果想从一个新的事务中获得session(也就意味着当其不存在事务控制),则必须使HibernateTemplate中的allowCreate变量的值为”true”,而现在设置allowCreate变量的值为”false”就意味着无法从新的事务中获得session,也就是只能从当前事务中获取,所以必须对当前方法进行事务控制,否则会抛出如下异常:Java代码同时,如果对getSession()所在的方法进行事务控制,那么类似如下的代码:只会打开一个session,因为事务控制必须确保是同一个连接,spring会确保在整个相关方法中只存在一个session。
hibernate的n+1问题
什么叫n+1次select查询问题?在Session的缓存中存放的是相互关联的对象图。
默认情况下,当Hibernate 从数据库中加载Customer对象时,会同时加载所有关联的Order对象。
以Customer和Order类为例,假定ORDERS表的CUSTOMER_ID外键允许为null,图1列出了CUSTOMERS表和ORDERS表中的记录。
以下Session的find()方法用于到数据库中检索所有的Customer对象:List customerLists=session.find("from Customer as c");运行以上find()方法时,Hibernate将先查询CUSTOMERS表中所有的记录,然后根据每条记录的ID,到ORDERS表中查询有参照关系的记录,Hibernate将依次执行以下select语句:select * from CUSTOMERS;select * from ORDERS where CUSTOMER_ID=1;select * from ORDERS where CUSTOMER_ID=2;select * from ORDERS where CUSTOMER_ID=3;select * from ORDERS where CUSTOMER_ID=4;通过以上5条select语句,Hibernate最后加载了4个Customer对象和5个Order 对象,在内存中形成了一幅关联的对象图,参见图2。
Hibernate在检索与Customer关联的Order对象时,使用了默认的立即检索策略。
这种检索策略存在两大不足:(1) select语句的数目太多,需要频繁的访问数据库,会影响检索性能。
如果需要查询n个Customer对象,那么必须执行n+1次select查询语句。
这就是经典的n+1次select查询问题。
这种检索策略没有利用SQL的连接查询功能,例如以上5条select语句完全可以通过以下1条select语句来完成:select * from CUSTOMERS left outer join ORDERSon CUSTOMERS.ID=ORDERS.CUSTOMER_ID以上select语句使用了SQL的左外连接查询功能,能够在一条select语句中查询出CUSTOMERS表的所有记录,以及匹配的ORDERS表的记录。
bug大全
0、需要标识符a) 不在函数内1、非法表达式开始b) 可能:丢失括号 .2. no data founda) 可能:setInt(1,100)中,没有100这个值3. 找不到符号a) 可能:没导入包4. 指定了无效URLa) 可能:数据库名或IP错误,即连接出错5. 类路径没有找到a) 可能: ClassNotFoundException: oracle.jdbc.driver.OracleDriverb) 原因: 一般是指包名写错,或者没有import包,或者没有在类路径中找到jar文件 c) 解决: 没有加载Oracle驱动jar,在.bash_profile中把ojdbc14.jar加进来6. 空指针异常a) 可能: 数据源错误比如数据库名或IP错误7. 不能执行查询a) 可能: 数据库中表的问题,比如列名不存在8. invalid identitya) 可能: 列名出错9. 若在数据库中创建了两个sequence ,运行时出现异常可能是先后执行了多次select语句,导致与原有的序列号产生冲突10. 表名或列名不存在a) 可能:表不存在或者没有插入数据到表中11. 不支持的类,类的版本错误a) 可能:没有导入jdk5.0,或者编译器仍为1.412. MappingNotFoundExceptiona) Maybe: In the Eclipse Not refersh , or not exist in the dirctory13. HibernateException: /hibernate.cfg.xml not found a) Maybe1: hibernate.cfg.xml not in the root directory b) Maybe2: Could not parse configuration .c) resolve: database not connect or use another database14. ConstraintViolationException a) Maybe: used a not true database15. 驱动没有找到或者 JDBC Driver not found可能:连接数据库的驱动jar包不存在或者版本不一致,比如将旧的版本换成新的会造成该类错误16. 空指针异常, ng.NullPointerExceptiona) 可能1:数据库连接出错,比如在hibernate.cfg.xml中的数据错误会导致异常。
hibernate 乱码问题
(Hibernate不适合的场景:不适合OLAP(On-Line Analytical Processing联机分析处理),以查询分析数据为主的系统;适合OLTP(on-line transaction processing联机事务处理))。
对于些关系模型设计不合理的老系统,也不能发挥hibernate优势。
Student student = new Student();
student.setSno("0001");
student.setName("zxl");
student.setAge(27);
Session s = HibernateUtil.getSession();
<property name="age" column="age" type="integer"/>
</class>
10.hibernate 查询方式:1.hql 查询; 2.Criteria 查询 (偏于面向对像的查询方式)
hql 查询代码如下:
public void query(String name){
Session s=null;
Transaction t=null;
try{
s=HibernateUtil.getSession();
t=s.beginTransaction();
s.save(user);
mit();
session=configuration.buildSessionFactory().openSession();
4.数据库中事务的概念及性质?
关于hibernate的LazyInitializationException异常
关于hibernate的LazyInitializationException异常今天使用hibernate处理双向关联关系时出现了一个问题,先看一段代码:这是在dao层写的一个简单的查询方法实现,通过id查询班级信息,并通过hibernate关联查询班级所有的学生信息:public Grade findById(int id){Session session HibernateUtil.getSessionFactory().openSession();Grade grade=(Grade)session.load(Grade.class,id);session.close();return grade;}我在测试类的main方法里写了如下代码进行测试:GradeDao gdao=new GradeDao();Grade findGrade=gdao.findById(143402);Set<Student>students=findGrade.getStudents();System.out.println(findGrade.getGname()+"有如下学生:");for(Student stu:students){System.out.println(stu.getSname());}先说明一下:Grade和student里的数据是通过关联写进数据库的,所以证明两个实体被正确关联,数据库中班级表中我已经写入了班号为143402的班级信息,学生表中也存在班号为143402的学生信息,所以看起来这两段代码应该没问题,但是当我运行的时候发生如下异常:(图片:1)后来我上网查了一下,hibernate3在one-to-many关联中,所有的实体设置文件中的lazy 属性都被默认设成了lazy=“proxy”,此处proxy相当于true,lazy=”true“意思是延时加载,简单理解就是,你使用了lazy=true,这样hibernate在从数据库中调数据的时候是不会把关联的对象查出来的,而是保存一个获取值得方法,在你使用getXXX()调用的时候,hiberante会利用这个保存的方法去从数据库中取数据。
程序员常见的问题解答
程序员常见的问题解答1.Configuration接口的功能,主要作用?创建一个Configuration对象配置和启动hibernate框架创建SessionFactory对象的实例读取hibernate.cfg.xml核心配置文件2.Hibernate持久化操作的七步?1.创建Configuration对象2.创建SessionFactory对象3.创建Session对象4.开始事物5.持久化操作6.提交事物7.关闭Session3.怎么样使用HQL查询方法?创建一个查询createQuery()创建一个Query查询接口的实例,该实例可以利用HQL语言来进行数据库的查询操作。
HOL语句要给createQuery()方法作为参数才可以让Query方法来进行查询操作4.事务具有几个基本特征,都是什么吗?(ACID):1 Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。
2 Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。
3 Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。
同时,并行事务的修改必须与其他并行事务的修改相互独立。
4 Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。
5. 如果两个事物并发运行,就可能出现以上五种并发问题,都是什么?1第一类丢失更新(Lost update)2. 脏读取(Dirty Reads):3.虚读(Phantom Reads)4. 不可重复读取(Non-repeatable Reads)5第二类丢失更新(Second lost updates problem)6.hibertnate中的关联关系包括1.一对一的关联模式2.一对多的关联模式3. 多对多的关联模式7. 怎么样把映射表的xml文件配置到Hibernate核心配置文件中:<mapping resource="model/Student.hbm.xml" />8. ORM全称?(Object - Relation Mapping)对象关系映射9.ORM的工作原理?把持久化类映射成数据库中的表把对象映射成数据库中表的一行记录把对象的属性映射成数据库中表的字段10. Session接口的功能它是应用程序与数据库之间交互的但线程对象,一个session同样对应一个数据库,所以它是hibernate提供的与进行持久化操作的对象(持久化操作为增,删,改,查)同时它也是一个事物对象的工厂,及Transaction对象两种创建方式11.session中最常用的几种持久化操作的方法?save()delete()update()load()get()12. Session缓存的作用?1、减少访问数据库的频率。
SSH整合常见错误
spring+hibernate出错小结:(1)ng.NoClassDefFoundError: org/hibernate/context/CurrentSessionContext原因:出现这错误时,请更改hibernate的包,更新至最新或3.1以上(2)ng.NoClassDefFoundError: javax/transaction/TransactionManager原因:缺少jta.jar 或者是找不到hbm.xml文件导致sessionfactory出错,检查hbm文件路径是否正确,文件是否存在(3) 错误:Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update或者org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not insert: [com.yourcompany.model.Login]; bad SQL grammar [insert into mysql__login (name,password) values (?,?)]; nested exception is java.sql.SQLException: Table 'mysql.mysql__login' doesn't exist java.sql.SQLException: Table 'mysql.mysql__login' doesn't exist原因与解决:因为Hibernate Tools(或者Eclipse本身的Database Explorer)生成*.hbn.xml 工具中包含有catalog="***"(*表示数据库名称)这样的属性,将该属性删除就可以了(4)org.springframework.orm.hibernate3.HibernateQueryException: undefined alias原因:在spring配置文件中,可能你设置了<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>,指定了HQL的解释器,请删除或更改另一个解释器org.hibernate.hql.ast.ASTQueryTranslatorFactory,如果没有设置,请确认是否有写错了HQL语句,是否与POJO里的属性一样。
外企面试官最爱提的十个问题及数十题目程序员面试趣味智力题
1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢(1分钟)
2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻?(5秒-1分钟)
依此类推
条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。
问题:第一个海盗提出怎样的分配方案才能使自己的收益最大化?
第二题 . 一道关于飞机加油的问题,已知:
每个飞机只有一个油箱,
飞机之间可以相互加油(注意是相互,没有加油机)
一箱油可供一架飞机绕地球飞半圈,
(考前无读题时间);成功率(凡事可能只有一次机会)。考试结果采用电脑计分,如果没通过就被淘汰了。
(2)英文测试。这个测试主要用于考核母语不是英语的人的英文能力。考试时间为2个小时。45分钟的100道听力题,75分钟的阅读题,以及用1个小时回答3道题,都是要用英文描述以往某个经历或者个人思想的变化。
10.如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始?
11.如果你的生涯规划中打算在5年内受到奖励,那获取该项奖励的动机是什么?观众是谁?
12.如果微软告诉你,我们打算投资五百万美元来启动你的投资计划,你将开始什么样商业计划?为什么?
13.如果你能够将全世界的电脑厂商集合在一个办公室里,然后告诉他们将被强迫做一件事,那件事将是什么?
第八,请你举1个具体的例子,说明你是怎样学习1门技术并且怎样将它用于实际工作中。
根据以上几个问题,面试时每一位面试官当场在各自的“面试评估表”上打分:打分分为3等:1—2分(能力不足,不符合职位要求、缺乏技巧,能力及知识),3—5分(普通至超乎一般水准;符合职位要求;技巧、能力及知识水平良好),6—8分(杰出应聘者,超乎职位要求;技巧、能力及知识水平出众)。具体项目评分包括说服力/毅力评分、组织/计划能力评分、群体合作能力评分等项目评分。在“面试评估表”的最后1页有1项“是否推荐栏”,有3个结论供面试官选择:拒绝、待选、接纳。在宝洁公司的招聘体制下,聘用1个人,须经所有面试经理一致通过方可。若是几位面试经理一起面试应聘人,在集体讨论之后,最后的评估多采取1票否决制。任何1位面试官选择了“拒绝”,该生都将从面试程序中被淘汰。
Hibernate报错大全
(1):ng.ClassCastException:ng.Integer cannot be cast to org.hibernate.classic.Session报错原因:已经打开的Session强转创建对象Session调.Save()方法造成的。
解决方法:直接点方法,或者赋值后再调.Save()方法。
(2)org.hibernate.hql.ast.QuerySyntaxException:AUCTIONUSER is not mapped.[FROM AUCTIONUSER WHERE USERNAME=:USERNAME AND USERPASSWORD=:USERPASSWORD]报错原因:在Hibernate中使用Query是对象不是数据库中的表名,是实体类名解决方法:修改HQL语句表名为实体类名(3)ng.NullPointerException报错原因:空指针一般是空对象未实例化造成的解决方法:找到对象高度值的状态值是否为Null(4)javax.el.ELException:Cannot convert0of type class ng.Long to class ng.Boolean报错原因:Integer和Bool类型转换失败解决方法:修改类型统一(5)org.hibernate.exception.SQLGrammarException:could not get next sequence value报错原因:Oracle数据库中创建没有序列解决方法:去数据库中创建序列(6)org.hibernate.exception.LockAcquisitionException:Cannot open connection报错原因:Oracle服务没有启动解决方法:启动Oracle服务就搞定(7)org.hibernate.exception.GenericJDBCException:Could not execute JDBC batch updateCaused by:java.sql.BatchUpdateException:ORA-12899:列"AUCTION"."AUCTIONUSER"."USERPOSTNUMBER"的值太大(实际值:16,最大值:6)报错原因:插入数据与数据库约束不符解决方法:检查插入数据与数据库约束是否一致、是否是非法数据(7)org.hibernate.hql.ast.QuerySyntaxException:unexpected token:*near line1,column8[select*from com.bdqn.entity.Auction]报错原因:HQL语句错误*解决方法:检查HQL语句(8)Exception in thread"main" org.hibernate.PropertyAccessException:exception setting property value with CGLIB(set e_reflection_optimizer=false for more info) setter of com.bdqn.entity.Emp.setComm报错原因:解决方法:把实体类中的int改成Integer double改为Double (9)Caused by:org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions(1)are: PropertyAccessException1: org.springframework.beans.MethodInvocationException: Property'driverClassName'threw exception;nested exception is ng.IllegalStateException:Could not load JDBCdriver class[oracle.jdbc.OracleDriver]报错原因:找不到oracle架包解决方法:加载oracle架包。
整理最全的Java笔试题库之问答题篇-国企笔试题库
整理最全的Java笔试题库之问答题篇|国企笔试题库最全的Java笔试题库之问答题篇问题:最全的Java笔试题库之问答题篇-总共243道【1~60】回答: 1. J2EE是什么?它包括哪些技术?解答:从整体上讲,J2EE是使用Java技术开发企业级应用的工业标准,它是Java技术不断适应和促进企业级应用过程中的产物。
适用于企业级应用的J2EE,提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。
J2EE是一个标准,而不是一个现成的产品。
主要包括以下这些技术: 1) Servlet Servlet是Java平台上的CGI技术。
Servlet在服务器端运行,动态地生成Web页面。
与传统的CGI和许多其它类似CGI的技术相比,Java Servlet具有更高的效率并更容易使用。
对于Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问的。
2)JSP JSP(Java Server Page)是一种实现普通静态HTML和动态页面输出混合编码的技术。
从这一点来看,非常类似Microsoft ASP、PHP等技术。
借助形式上的内容和外观表现的分离,Web页面制作的任务可以比较方便地划分给页面设计人员和程序员,并方便地通过JSP来合成。
在运行时态,JSP将会被首先转换成Servlet,并以Servlet的形态编译运行,因此它的效率和功能与Servlet相比没有差别,一样具有很高的效率。
3) EJB EJB 定义了一组可重用的组件:Enterprise Beans。
开发人员可以利用这些组件,像搭积木一样建立分布式应用。
4)JDBC JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据库开发人员能够用标准Java API编写数据库应用程序。
Hibernate学习总结
一.对象语言和操作数据库不匹配:模型不匹配(阻抗不匹配)①.可以使用JDBC手动转换;sql参数和jdbc中用对象赋值②.使用ORM(Object Relation Mapping对象关系映射)框架:hibernate 二.Hibernate安装配置①.配置文件Hibernate.cfg.xml和Hibernate.properties②.映射文件xxx.hbm.xml:对象模型和关系模型的映射三.开发流程1.由Domain Object -> mapping -> db2.有DB开始,用工具生成mapping和Domain Object3.由配置文件开始四.Domain Object限制1.默认的构造方法(必须的)2.有无意义的标示符id(主键) 可选3.非final的,对懒加载有影响可选Configuration SessionFactory Session Transaction Query CriteriaConfiguration类Configuration类负责配置并启动Hibernate,创建SessionFactory对象。
在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory 对象。
SessionFactory接口SessionFactory接口负责初始化Hibernate。
它充当数据存储源的代理,并负责创建Session对象。
这里用到了工厂模式。
需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
Session接口Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。
Hibernate常见错误
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:213)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
... 3 more
Caused by: java.sql.BatchUpdateException: ORA-00904: "JD_NAME": 标识符无效
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10070)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
java应届生面试题目(3篇)
第1篇一、Java基础知识1. 请简述Java的基本特性和优势。
解析:Java具有简单性、面向对象、分布式、平台无关性、安全性、多线程、动态性、强类型、高效率、可移植性等特性。
其优势在于跨平台、安全性高、易于开发、有丰富的类库等。
2. 请解释Java中的基本数据类型和引用数据类型。
解析:基本数据类型包括byte、short、int、long、float、double、char、boolean;引用数据类型包括类、接口、数组等。
3. 请解释Java中的封装、继承、多态三个基本概念。
解析:封装是指将类的属性和方法封装在一个单元中,隐藏内部实现细节;继承是指子类继承父类的属性和方法,实现代码复用;多态是指同一方法在不同对象上表现不同的行为。
4. 请解释Java中的构造函数和析构函数。
解析:构造函数用于创建对象时初始化对象的属性,析构函数用于销毁对象时释放对象占用的资源。
5. 请解释Java中的static关键字。
解析:static关键字用于修饰成员变量和方法,表示该成员变量或方法属于类,而不是对象。
6. 请解释Java中的final关键字。
解析:final关键字用于修饰成员变量、方法和类,表示该成员变量、方法或类不可修改。
7. 请解释Java中的异常处理机制。
解析:Java中的异常处理机制包括try-catch-finally语句,用于捕获和处理程序中的异常。
8. 请解释Java中的泛型。
解析:泛型是一种参数化类型,允许在定义类、接口和泛型方法时指定类型参数,提高代码的复用性和安全性。
二、Java集合框架1. 请解释Java中的List、Set和Map接口。
解析:List接口表示有序集合,Set接口表示无序集合且元素不可重复,Map接口表示键值对映射。
2. 请解释Java中的ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等常用集合类。
解析:ArrayList和LinkedList实现List接口,ArrayList基于数组实现,LinkedList基于链表实现;HashSet和TreeSet实现Set接口,HashSet基于哈希表实现,TreeSet基于红黑树实现;HashMap和TreeMap实现Map接口,HashMap基于哈希表实现,TreeMap基于红黑树实现。
收集:Hibernate中常见问题 No row with the given identifi
Hibernate中常见问题No row with the given identifier exists问题的原因及解决产生此问题的原因:有两张表,table1和table2. 产生此问题的原因就是table1里做了关联<one-to-one>或者<many-to-one unique="true">(特殊的多对一映射,实际就是一对一)来关联table2.当hibernate查找的时候,table2里的数据没有与table1相匹配的,这样就会报No row with the given这个错.(一句话,就是数据的问题!)假如说,table1里有自身的主键id1,还有table2的主键id2,这两个字段.如果hibenrate设置的单项关联,即使table1中的id2为null值,table2中id2中有值,查询都不会出错.但是如果table1中的id2字段有值,但是这个值在table2中主键值里并没有,就会报上面的错!如果hibernate是双向关联,那么table1中的id2为null值,但是table2中如果有值,就会报这个错.这种情况目前的解决办法就是改成单项关联,或者把不对应的数据改对!这就是报这个错的原因了,知道原因了就相应的改就行了.或许还有些人迷惑hibernate关联都配好了,怎么会出现这样的错?其实这是编程的时候出现的问题,假如说我在添加信息的时候,页面传过来的struts的formbean到dao方法中需要封装成hibernate的po(就是 hibenrate的bean),要是一个个po.get(form.set())实在太麻烦了,这样一般都会写个专门的方法来封装,遇到po.get(form.set())这种情况直接把struts的formbean对象传到此方法中封装就行了,假如我有个字段是创建人id,那么这个字段是永远不会改的,我在添加的时候还调用这个方法,这个专门封装的方法是有一些判断的,假如说我判断一下,如果遇到创建人id传过来为空值,我判断如果是空值,我把创建人id设为0,但是用户表中userid是主键从1开始自增的,那么这样数据就对应不上了,一查就会出这个错了.这个错在开发刚开始的时候经常发生,因为每个人的模块都是由相应的人独立开发完成以后再整合在一起的,每个人写单独那一块的时候往往会忽略这些,所以整合的时候这些问题往往就都一下子全冒出来了....整合很辛苦,tnnd!hibernate的查询的比较hibernate的查询有很多,Query,find,Criteria,get,loadquery使用hsql语句,可以设置参数是常用的一种方式criteria的方式,尽量避免了写hql语句,看起来更面向对象了。
框架问题
1、什么是MVC?常用的MVC框架有哪些?1、M:Model 模型层主要用来处理业务逻辑,承载数据;通常JavaBean2、V:View 视图层主要用来做页面显示的,和用户交互,通常jsp3、C:Control 控制层主要用来进行业务流程控制;将M和V关联起来,通常servlet 或Struts的核心控制器和action4、常用的MVC框架包括:Struts、Struts2、SpringMVC;2、谈谈Struts2的工作流程(或运行原理)备注:下面的描述必须转换成自己的语言进行表述!!!这道题非常重要,面试官关于Struts2的很多问题都可以从本题中找到答案。
1、客户端发送一个指向Servlet容器(例如Tomcat)的请求2、这个请求经过一系列的过滤器(Filter)3、接着FilterDispatcher(核心控制器)被调用,将request中所携带的数据放入值栈(ValueStack);4、 FilterDispatcher询问ActionMapper(映射)来决定这个请求是否需要调用某个Action,把请求的处理交给ActionProxy(代理);5、 ActionProxy通过Configuration Manager询问框架的配置文件(struts.xml),找到调用的Action类;6、 ActionProxy创建一个ActionInvocation的实例;7、 ActionInvocation在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用;8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果(JSP显示结果)。
9、生成对应的response,经过拦截器、过滤器响应给用户;3、说说struts1与struts2的区别备注:下面的描述必须转换成自己的语言进行表述!!!1、都是MVC的WEB框架;2、struts1的核心控制器是一个Servlet,名称为ActionServlet,struts2的前端控制器是一个filter,在struts2.0中叫FilterDispatcher,在struts2.1中叫StrutsPrepareAndExecuteFilter;3、struts1的action需要继承Action类,struts2的action可以不继承任何类;struts1对同一个路径的所有请求共享一个Action实例,是单例,struts2对同一个路径的每个请求分别使用一个独立Action实例对象,所有对于struts2的Action不用考虑线程安全问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1问:Hibernate初始化时总是报错:ng.NoClassDefFoundError Hibernate初始化时出现出错代码:ng.NoClassDefFoundError: net/sf/ehcache/CacheException答:这是新手常见问题。
是因为使用默认设置时,Hibernate文档里指出的Hibernate库不完整,缺少ehcache.jar(用于支持Ehcache的相关文件)。
配置中加入以上文件,就可以避免初始化时出现ng.NoClassDefFoundError:net/sf/ehcache/CacheException异常。
// GOOGLE了下,发现很多人都说直接删除:lib下的hibernate-annotations.jar即可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 configuredng.UnsupportedOperationException: The user must supply a JDBC connectionat erSuppliedConnectionProvider.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)atnet.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""/Hibernate-mapping-3.0.dtd"><!--This mapping demonstrates content-based discrimination for thetable-per-hierarchy mapping strategy, using a formuladiscriminator.--><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,运行时总报ng.NoClassDefFoundError: org/ Hibernate/Session异常使用Elipse,所用包是hibernte 3,发现在Action中每次执行到:session=HibernateSessionFactory.currentSession();时,出现ng.NoClassDefFoundError: org/Hibernate/Session异常,如下:ng.NoClassDefFoundError: org/Hibernate/SessionHibernate3.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: nullstatus: nullstate: INIT_WAITING_DEPLOYERwatch: file:/C:/Downloads/temp/Jboss-4.0.0/server/default/deploy/Hibernate.cfg .xmlaltDD: nulllastDeployed: 1113987414046lastModified: 1113987414046Incompletely deployed packages:org.Jboss.deployment.DeploymentInfo@24bd343{ url=file:/C:/Downloads/temp/Jboss-4.0.0/server/default/deploy/Hibernate.cfg.xml }deployer: nullstatus: nullstate: INIT_WAITING_DEPLOYERwatch: file:/C:/Downloads/temp/Jboss-4.0.0/server/default/deploy/Hibernate.cfg .xmlaltDD: nulllastDeployed: 1113987414046lastModified: 1113987414046mbeans:答:这是在Jboss中使用Hibernate的常见问题。