hibernate 学习汇总(更新ing)

来源:互联网 发布:李世民杀兄 知乎 编辑:程序博客网 时间:2024/05/19 07:43

--------------------------------------异常总结-------------------------------------------------------------------

Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session

 

问题产生:  由于使用了load()函数 并将session 关闭,然后使用load出来的对象属性产生错误。

    以上问题是由于新版的hibernate中奖属性获取方式lazy默认为ttrue,就是延迟抓取。所谓的延迟抓取就是在使用该对象属性的时候才会真正的去数据库读取数据,因此当你把session关闭之后,你就相当于和数据库连接中断了,那么获取数据将发生异常。

 



 

 

-------------------------------------------知识点汇总-------------------------------------------------------------------------------------------------

 

1.hibernate 继承映射有如下方式

    i.一个子类对应着一张表(即子类独有的字段就是表的字段)

    ii.一个表对应着多个类(指的是一个表存储着不同子类的信息)

    iii.一个完整的类对应着一张表(指的是所有的一个表体现了子类与父类的所有字段)

注意:对于一个表对应着多个类的映射情况需要注意的是存在着区别子类对象的字段,比如男生boy与女生girl同样继承于一个person    person对应的表字段应该涵盖所有子类的字段,而sex字段就是区分boy与girl,同时区别的字段sex不应该做为映射的属性,

 

配置如下

<hibernate-mapping>

 <class lazy="false" name="testhibernate.student" table="student">

  <id name="id"  column ="id" type="integer" >

   <generator class="native"></generator>

  </id>

        <!--区别子类的字段-->

  <discriminator column="sex"></discriminator>

  <property generated="never" lazy="true" name="name" type="java.lang.String">

   <column name="name"/>

  </property>

  <property generated="never" lazy="true" name="school" type="java.lang.String">

   <column name="school"/>

  </property>

  <subclass name="testhibernate.boy.boy"  discriminator-value="1">

  <property name="height" type="double"></property>

  </subclass>

  <subclass name="testhibernate.girl.girl"  discriminator-value="0">

  <property name="height" type="double"></property>

  </subclass>

 </class>

</hibernate-mapping>

 

 

原创粉丝点击