Hibernate——映射关系中的属性详解

1. <property insert="true/false" >

默认为true,如果设置为false,则不能向该字段插入值。
这个属性,我是这样应用的:
User和Dept,多对一,user.java中有dept的引用,当save(User)时,如果在不设置cascade=“save-update”的情况下,则save(User)无法保存。这时,一种方案是根据dept的id做一次查询,将游离状态的dept变为持久状态,如果要保存的对象关联的对象非常多,不想一一查询,可以通过insert="false"这个属性来完成对象保存。
user.java:
private SysDept sysDept;
private String deptId;//添加用户时使用
在user.java中除了引用Dept对象外,再加一个string类型的deptId。
另个属性都对应数据库中的同一个字段,这时候,insert="false"就派上用场了。
<!--user.dept.deptName -->
<many-to-one name="sysDept" class="cn.company.dept.model.SysDept"
column="DEPT_ID" insert="false" update="false">
</many-to-one>
<!--添加时使用deptId -->
<property name="deptId" column="DEPT_ID" type="java.lang.String" ></property>
这样的话,save(User)时不受Dept游离状态的影响,当查询User时,也能关联出Dept。

2. <property update="true/false" >

同上

3. cascade=“delete”

表示删除本对象时,级联删除所有与之关联的对象。
例如Module和Project(多对一),设置该属性时,发出的sql:
Hibernate: update PM_MODULES set PROJECT_ID=null where PROJECT_ID=?
Hibernate: delete from PM_PROJECT where ID=? and VERSION=?
不设置该属性时,只是Module中的外键projectId被置为null,不设置该属性时发出的sql:
Hibernate: update PM_MODULES set PROJECT_ID=null where PROJECT_ID=?
Hibernate: delete from PM_MODULES where ID=? and VERSION=?
Hibernate: delete from PM_MODULES where ID=? and VERSION=?
Hibernate: delete from PM_PROJECT where ID=? and VERSION=?

4. <class dynamic-insert="true/false">

如果表中包含N多字段,建议把 dynamic-update属性和insert属性设置为true,这样在插入和修改数据的时候,语句中只包括要插入或者修改的字段.可以节省SQL语句的执行时间,提高程序的运行效率.
下面是在设置和不设置该属性的情况下,执行同一个save()操作时的sql:
Hibernate: insert into WORKLOG (VERSION, WORK_TASK, WORK_LOAD, WORK_PROGRESS, WORK_PROBLEM, WORK_DATE, CREATE_DATE, CREATE_USER, TASK_CATEGORY, ID) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Hibernate: insert into WORKLOG (VERSION, WORK_TASK, WORK_LOAD, WORK_PROGRESS, WORK_PROBLEM, WORK_DATE, CREATE_DATE, CREATE_USER, UPDATE_DATE, UPDATE_USER, EXT_FIELD, EXT_FIELD1, TASK_CATEGORY, PROJECT_ID, MODULE_ID, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值