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框架——综合的主要内容,如果未能解决你的问题,请参考以下文章

JavaEE框架——hibernate框架的综合使用

Hibernate-ORM:01.Hibernate恍如隔世般初见

Hibernate ORM初始(入门基础)

java 三大框架——Hibernate

Hibernate框架基础

Hibernate ORM框架——Hibernate查询