Hibernate ORM框架——综合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate ORM框架——综合相关的知识,希望对你有一定的参考价值。
换一个连接数据mysql数据库的项目:HibernateStudy_cascade_inverse_query **********1.支持sql server需要的设置******************************************************* a):驱动jar的处理-->导入sqljdbc42.jar连接数据库驱动 b):修改hibernate.cfg.xml中配置相关的连接,方言 <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> <property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=demo</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property> c):开启TCP/IP的支持-->计算机管理,服务和应用程序,SQL Server配置管理器,SQL Native Cloient 10.0配置,客户端协议 d):启动sql server的服务 **********2.关联数据的处理**************************************************************** 关联数据的插入,更新(修改),删除的顺序 假定A是主表,B是子表 create table A ( aid varchar2(255 char) not null, primary key(aid) ) create table B ( bid varchar2(255 char) not null, primary key(bid), raid foreign key(aid) references A //外键 ) 在MySQL数据库层面*************************************** a)insert(添加操作) : 先主表,后从(子)表 b)update(更新)(我们一般是不更新表的主键) 在数据库层面来看,如果不考虑更新主键,顺序是无关紧要的。 c)delete(删除) 先删从表(子表)的,然后再删主表 在hibernate代码层面************************************* 关联数据如果MySQL的代码和自己预想中的有出入,如何处理,需考虑的点。 1.考虑调用session对象的save,update,delete的顺序问题 2.考虑在代码层面有没有设置关系,外键是否允许为null 3.考虑对象此时的状态 帮助判断工具:sql server的监听器 **********3.cascade(级联)************************************************************* **********4.inverse(确定关系维护方)****************************************************** 关系维护,本质就是谁负责处理外键列的值。 inserse 一般是出现的映射文件的set元素里面 因为出现在set里面,也就是出现主表的映射文件中 如果把inserse设置为true,就表示由对方,也就是 子表来维护关系(就不会继续进行修改操作,而此时查表时的外键值也为空),主的一方不管。 -->在添加子表的时候,相关联的主表就跟着添加了 一般默认inserse的值为true,即为自己就是维护关系方,会进行修改(更新)操作 所以一般来说永远交给子表来维护关系,是比较合理的(比如:一个应届生,他并不属于任何部门, 那么在这个应届生中存在两张表,一张是个人的信息表,一张是部门表。在个人信息表中的所属部门可以为空, 等到该应届生,正式成为某某部门的时候,才不为空。也同时说明,外键一般时可以为空的) **********5.关联数据的查询形式(检索策略)**************************************************** 关联数据的加载,有3种情况 1.延迟(lazy)也叫作懒加载: 当只在查找班级数据后,马上调用session.close();那么久默认为延迟(lazy)加载。即后面还没有查找完的语句就不查找了 默认:lazy="true" 2.勤加载(eager) 当只在查找班级数据后,马上调用session.close();而后面还没有查找完的语句就系统仍然自动查找,称为勤加载(eager) lazy="false"如在学生这边加,在查询学生信息的同时也查询班级信息是正常的 3.外键加载(显式加载): outer-join="true":查询的SQL语句中只用左外连接显示出一条查询结果 避免普通查询,两张表,则需要发送两条select语句。
/*以上个人整理笔记,如果有误或者有不懂的地方,欢迎评论与指出*/
以上是关于Hibernate ORM框架——综合的主要内容,如果未能解决你的问题,请参考以下文章