hibernate映射文件详解

坚持每天写博文,积累下开发中的点点滴滴

  • 思考:hibernate什么时候会调set方法什么时候会调get方法?
    保存时需要传入数据的时候会调用get方法来获取字段值,查询出数据以后装回到domain对象时使用。
  • hibernate不需要考虑get/set方法的可见性
    即,hibernate能够调用私有的set/get方法

  • <hibernate-mapping>中有一个package属性,用来定义domain的包

  <hibernate-mapping package="text">
  <class name="User" table="user">
  等价于
   <hibernate-mapping>
  <class name="text.User" table="user">
  注意两行都写全包名也不会报错,因为hibernate会先找 <class name="text.User" table="user">中验证,如果没有再添加 <hibernate-mapping package="text">
  但是不能直接在包里写完全,即<hibernate-mapping package="text.User">是错误的

 - <property name="user_name" column="user_name"/>里的type不需要配,并且name属性需要避免作为数据库的关键字,否则数据库不能建表。

  • 关于日期格式,默认是年月日时分秒,可以设置属性来格式化
//默认是年月日时分秒,一般来说只有日期会配置type
 <property name="dateText" type="date"/>//年月日
 <property name="dateText" type="time"/>//时分秒
  • hibernate映射文件默认包含所有字段,比如我在使用保存方法时,即使某个属性是空,sql语句也会包含这个属性。如果我想要某个属性不被包含,可以配一个属性
//inset属性默认是true,false为不包含(保存操作)
//update属性默认是truefalse为不包含(修改操作)
//inset很少用,update对那些意境填写不得修改的属性(如创建时间,身份证等)
<property name="user_name" column="user_name" inset="false" update="false"/>
  • 问题

:不同包里面有两个同名的domain对象,映射文件编译报错,此时应该修改其中一个auto-import=”false”<hibernate-mapping package="text" auto-import="false">

  • 注意:此时我写sql进行查询:
 `String hql = "SELECT o FROM User o";
        Query query = session.createQuery(hql);
        System.out.println(query.list());`

此时查询的是auto-import=”true”对应的User,此时应该使用全类名:

String hql = "SELECT o FROM text.User o";

除了这样直接写全类名,也可以在映射文件中给此类设置一个别名,然后查询别名。
映射文件:

<hibernate-mapping package="text" auto-import="false">
 <import class="text.User" rename="User2"/>

sql:String hql = "SELECT o FROM User2 o";

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章