hibernate 映射文件中的基本属性

本文主要是学习hibernate的对象关系映射文件中一些字段属性的作用

1、在<hibernate-mapping>元素中,<meta> <import> <class> <query>等子元素可以不存在,或者存在一次或多次;在<class>元素中<id>元素必须存在且只能存在一次,<property>元素可以不存在或者存在多次,而且<id>元素必须在<property>元素之前定义

1)指定类的文档 <meta attribute="class-description">abc</meta>

2)指定类的继承关系<meta attribute="extends">classA</meta>,这种写法会导致<hibernate-mapping>元素中所有的<class>都继承classA,若想设定某个<class>继承A,可以将<meta attribute="extends">classA</meta>放置在<class>元素中,

3)指定类属性的访问级别在<class>元素中定义<meta attribute="scope-field">protected</meta>针对该类的所有属性,在<property>定义只针对该属性


2、如何处理映射文件,实体类,数据库表三种类型的对应关系

比如实体类中属性类型为String在数据库表中代表的类型有可能是varchar或者text,这个时候映射文件必须显示的说明对应的类型是什么,类似下面的处理

<property name="address" column="address" type="text" />


3、hibernate访问实体类属性的策略

默认是通过属性的get/set方法来访问即access=“property”,但是通过access属性的设置也可以指定通过field方式来访问,此方式不需要get/set方法,如下方法:

<property name="name" type="string"  column="name" access=“field” />


4、在实体类中加入程序逻辑

1)比如实体类中定义了firstname和lastname属性,没有name属性,但对象关系映射文件使用的是name字段和数据库的name字段对应,我们可以在实体类中定义一个getName和setName的方法,然后在这两个方法中分别去设置firstname和lastname的值,因为我们知道hibernate默认不会直接设置name属性,而是会调用getName和setName方法来完成实体类和数据库记录的转换,但若修改了属性的访问策略为"field",则在生成实体类的时候,hibernate会有异常抛出,PropertyNotFindException。最后需要注意的是,hibernate的sql语句中出现的字段,必须是对象关系映射文件中定义的字段。

2)比如实体类中定义了total属性,我们可以设置这个属性在获取实体时,自动调用sql语句获取结果设置给属性,如下方式:

<property name="totalPrice" formula="(select sum(o.price) from orders o where o.cid=cid)">
</property>


5、控制update和insert语句

hibernate在初始化阶段会根据对象关系映射文件生成sql语句缓存在sessionfactory中,默认情况下sql语句包含了表的所有字段,但是通过设置可以改变这一行为,如下:

<property name="address" column="address" type="string" update=“false” />
这样在更新的时候,数据库的address字段就不会被更新到,insert也是相同的道理。insert和update的属性控制还可以作用于<class>元素上他们的默认值是true;除了insert和update,还有dynamic-insert和dynamic-update,他们的默认值为false,当设置为true时,即每次insert和update都动态的生成sql语句,而且只操作那些属性非空和需要更新的字段






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值