学习hibernate过程中,自己整理的一些数据,但不全面。

1.映射文件中,列的类型值一般都不需要写,会自动识别的,但是text型和date型一般都要写出来。


2.引擎问题,MySQLINOODBdIALECT引擎是支持事物和主键的,但是MySQLmyisamDialect引擎不支持,这个引擎只是查询数据比较快。


3. 简单的集合
  <!-- set集合  name值是你类中的一个属性值  table 是你执行程序后,生成的表名-->     (hashset无序,linkedhashset有序,不重复)
<set name="addressSet" table="user_address">
 <key column="userid"></key> <!-- 表的字段 -->
 <element type="string" column="address"></element>
</set>

<!-- list集合  跟set集合就多了一个list-index,name值是你类中的一个属性值  table 是你执行程序后,生成的表名-- -->     有序  可以重复
<list name="addressSet" table="user_address">
 <key column="userid"></key>
 <list-index column="idx"></list-index>
 <element type="string" column="address"></element>
</list>


<!-- map集合值,与上面差不多,就多了一个map-key键值对 -->(hashmap无序,linkedhashmap有序,不重复)
<map name="" table="">
<key column=""></key>
<map-key type=""></map-key>
<element></element>
</map>


4.order-by  (跟字段名  Desc/Asc) 如:order-by="address  desc"


5.多对一和一对多 
  <class name="Department" table="department">
<id name="id">
            <generator class="native"/>
</id>
<property name="name"/>
<!--外键在多的一方,employeeSet属性,Set集合,表达的是本类与Employee的一对多关系
class属性:写的是多的一方的类
column属性:写的是多的一方的名称
inverse:
   默认是false:表示本类关联关系;
      true:表示本类不关联关系;
      只是影响能否设置外键的值,不影响查询数据,(设置有效值或者是null值)
当你解除关联关系的时候,你从员工方解除的时候,
直接设置你的值为null就可以了,因为你的inverse设置的是true,
就说明你的关联关系是员工方设置。
 
但是当你在部门方解除关联关系的时候,你需要设置你的inverse值为false,
这样你才有权限去设置值。
 
删除员工方,(多方) 对对方没有影响
删除部门方   (一方)虽然也可以删除,但是首先是将员工方的值设置为null
然后才能正常删除
 
-->
<set name="employeeSet"  inverse="true">
  <key column="departmentId"></key> 
  <one-to-many class="Employee"/>
</set>

==========================================================================
<class name="Employee" table="employee">
<id name="id">
            <generator class="native"/>
</id>
<property name="name"/>
<!--department属性,表达的是本类与Department的多对一关系 
  class属性:写的是少的一方的类
  column:外键列
-->
<many-to-one name="department" class="Department" column="departmentId">


</many-to-one>


6.多对多的关联关系  (这个也需要设置inverse属性,否者    如果不设置的话,就需要你在
添加数据的时候,你要两边都添加数据,否者的话就会出现这样的错误

  <!-- 这个类是student类 -->
<!-- teachers属性,set集合,表达的是本类与Teacher的多对多
table:  这里表示的是中间表
   key:集和外键,(引用当前表主键的那个外键)
-->
<set name="teachers" table="teacher_student">
 <key column="studentId"></key>
<many-to-many class="Teacher" column="teacherId"></many-to-many>
</set>


============================================
<!-- 这个类是Teacher类 -->
<!--students属性,set集合,本类与Student类的多对多
table:  这里表示的是中间表
   key:集和外键,(引用当前表主键的那个外键)
 -->
<set name="students" table="teacher_student">
  <key column="teacherId"></key>
<many-to-many class="Student" column="studentId"></many-to-many>
</set>


7.关联关系的设置信息:
  1,没有关联对方的话,能删除。
  2,有关联的话且inverse=flase,由于可以维护关联关系,他就会把有关联关系的对象的外键设置null值,再删除自己。
   3,有关联的话且inverse=true,由于不能维护关联关系,所有就会直接执行删除自己,就会有异常

8. 级联的关系:(一般一对多或者一对一使用的比较多,多对多方式使用的少,不然删除一方,另外一方也会删除。)
关联关系的表,其实最直接的方法,就使用级联的方式,可以直接删除,
跟inverse和外键没有关系。
 cascade=""  delete  (删除对象的时候,关联的对象也直接删除)




9.外键约束和唯一性约束
<!-- 外键约束和唯一性约束 -->
<!--person属性,Person类型,表达的是本类与Person的一对一
  采用外键的方式一对一映射关系,本方有外键。
unique属性:设置为唯一值,不可以修改,用在身份证中
  -->
<many-to-one name="person" class="Person" column="personId" unique="true"/>

<!-- idCard属性,IdCard类型,本类与IdCard的一对一
property-ref:对方映射中,外键的属性名字
-->
<one-to-one name="idCard" class="IdCard" property-ref="person"/>

10. HQL语句没有写仔细
   hql="select e.name,count(e.id) as c"+
  "from Employee e"+
"where id<9"+
"group by e.name"+
"having count(e.id)>1"+  在having子句中不能使用列别名就是前面写的 c
"order by c ASC";        可以使用列别名
 
11.懒加载:
  也叫延迟加载,不是在执行获取操作时马上生成SQL,而是在第一次使用时生成SQL
  分成两种:
   类级别的;
    <class 。。。。lazy=“true/flase”>
  属性级别的:
    <set/list/map/bag   ....lazy="...">
    <many-to-one ....lazy="..."> 
    <one-to-one ....lazy="..."> 
       在使用懒加载 特性时,可能会有lazyinitialzationEXCEPTION
     原因   :
    真正去获取数据时,session已经没有了,
  解决办法:


方法一:让session在真正加载后在关闭
  方法二:或是在session关闭前执行hibernate。initialize


12.使用二级缓存,默认是打开的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值