首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate有关关键字段配置

2012-08-25 
Hibernate相关关键字段配置代码Parent parent (Parent) session.load(Parent.class, pid)session.delet

Hibernate相关关键字段配置

代码     Parent parent = (Parent) session.load(Parent.class, pid);    session.delete(parent);       1. 爸爸那边设置了cascade=all和inverse=true     a. delete from children     b. delete from parent       2. 爸爸那边设置了cascade=all,没有设inverse=true     a. update children set parent_id=null where parent_id=?     b. delete from children     c. delete from parent       因为此时inverse=false,所以爸爸要负责维护relationship,所以它要去把children中的连接信息都清空。但是,如果children的parent_id的constraint设置的是not-null的话,那么很不幸,hibernate执行到2.a就会throw exception了。       如果你要问,这个inverse=true到底是在源代码中的哪儿判断的呀?请看代码:           代码         ......       SessionImpl.flush();       SessionImpl.execute();       SessionImpl.executeAll(collectionRemovals);        executable.execute();       ScheduledCollectionRemove.execute();        getPersister().remove( getId(), getSession() );       OneToManyPersister(即AbstractCollectionPersister).remove();        if ( !isInverse ) {            PreparedStatement st = session.getBatcher().prepareBatchStatement( getSQLDeleteString() );        }       OneToManyPersister.getSQLDeleteString();        return "update children set parent_id=null where parent_id=?";       ......       -------------------------------- hibernate中inverse的用法 收藏 一、Inverse是hibernate双向关系中的基本概念。inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录!二、Inverse和Cascade的比较 Inverse:负责控制关系,默认为false,也就是关系的两端都能控制,但这样会造成一些问题,更新的时候会因为两端都控制关系,于是重复更新。一般来说有一端要设为true。 Cascade:负责控制关联对象的级联操作,包括更新、删除等,也就是说对一个对象进行更新、删除时,其它对象也受影响,比如我删除一个对象,那么跟它是多对一关系的对象也全部被删除。 举例说明区别:删除“一”那一端一个对象O的时候,如果“多”的那一端的Inverse设为true,则把“多”的那一端所有与O相关联的对象外键清空;如果“多”的那一端的Cascade设为Delete,则把“多”的那一端所有与O相关联的对象全部删除。

?

?

?

?

?

?

通过将<set>元素的lazy属性设置为true来开启集合类型的延迟加载特性这里我们应用了<cache usage=”read-only”/>配置,如果采用这种策略来配置集合类型,Hibernate将只会对数据索引进行缓存,而不会对集合中的实体对象进行缓存。<hibernate-mapping>    <class name=”com.neusoft.entity.User” table=”user”>…..<set name=”addresses” table=”address” lazy=”true” inverse=”true”><cache usage=”read-write”/><key column=”user_id”/><one-to-many class=”com.neusoft.entity.Arrderss”/></set>    </class></hibernate-mapping>

?

企业管理器--管理--SQL Server代理--右键作业--新建作业--"常规"项中输入作业名称--"步骤"项--新建--"步骤名"中输入步骤名--"类型"中选择"Transact-SQL 脚本(TSQL)"--"数据库"选择执行命令的数据库--"命令"中输入要执行的语句:                      --确定--"调度"项--新建调度--"名称"中输入调度名称--"调度类型"中选择你的作业执行安排--如果选择"反复出现"--点"更改"来设置你的时间安排为一天一次然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行

?

?

?

?

?

热点排行