代码
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服务启动,并设置为自动启动,否则你的作业不会被执行
分享到:
相关推荐
这里的关键在于配置了`lobHandler` Bean来处理CLOB和BLOB类型的字段。 ##### 2. Hibernate SessionFactory配置 在Hibernate的`SessionFactory`配置中,需要指定`lobHandler` Bean来处理CLOB和BLOB字段: ```xml ...
以下是一些关键步骤,以使Hibernate支持MySQL的`TEXT`字段: 1. **创建或扩展方言类**: - 如果现有的`MYSQLDialect`类不直接支持`TEXT`字段,你可以选择扩展它,添加对`TEXT`字段的支持。在子类中,你可以重写`...
总结,Hibernate作为一个强大的ORM框架,极大地简化了Java开发者与数据库的交互,而其配置文件和jar包是实现这一目标的关键组成部分。理解和掌握Hibernate的配置、映射、工作流程及其优化技巧,对于提升Java应用的...
4. **配置SessionFactory**:在Hibernate配置文件(hibernate.cfg.xml)中,添加自定义类型的相关配置。 ```xml <hibernate-configuration> ... <!-- 添加自定义类型 --> ... </hibernate-configuration...
6. **用Hibernate自动生成配置文件**:选择数据库中的目标表,如`t_user`,通过右键菜单选择“HibernateReverseEngineering”,根据提示逐步填写相关信息,包括主键类型、对应的Java类名及包名等,最后点击“Finish...
处理这些字段时,我们需要配置Hibernate的实体类和映射文件。 在实体类中,我们需要声明一个对应的字段,并使用Hibernate的@Lob注解来标识这是一个LOB字段。例如: ```java @Entity public class MyEntity { @Id ...
这里我们关注的是Hibernate 5.3版本的环境配置,这是一个关键步骤,确保后续的开发工作能够顺利进行。下面将详细介绍Hibernate 5.3框架环境配置的相关知识点。 1. **安装与下载**: 首先,你需要从Hibernate官方网站...
描述:本文深入解析了Hibernate映射文件配置的核心概念,重点阐述了映射文件的基本结构及其组成部分,包括主键(id)、普通属性(property)等关键元素的配置方法和策略。 ### Hibernate映射文件配置详解 在...
综上所述,掌握Hibernate4 jar包的使用和配置文件的编写,对于Java开发者来说是提升开发效率和代码质量的关键。通过深入理解这些知识点,可以更好地利用Hibernate实现数据库操作的自动化,从而专注于业务逻辑的实现...
首先,我们需要在Spring的配置文件中引入Hibernate的相关bean,通常命名为`applicationContext.xml`。这个文件是Spring的IoC(Inversion of Control)容器的定义,它会管理所有bean的生命周期。 1. **Spring配置...
理解并熟练配置Hibernate的基本要素,如配置文件、实体类映射、Session和SessionFactory的使用,是掌握Hibernate的关键。通过实际项目中的简单配置示例,可以更好地理解和应用这些概念。在`hibernate_start`这个...
### MyEclipse中Hibernate的基本配置步骤与理解 #### 一、引言 随着软件开发行业的不断发展,ORM(Object-Relational Mapping,对象关系映射)技术已成为连接对象模型与关系型数据库的重要桥梁之一。其中,...
在 Java 应用开发中,尤其是使用 ORM 框架如 Hibernate 进行持久化层开发时,如何高效地处理 BLOB 类型字段成为了一个关键问题。 本文档将详细介绍如何使用 Hibernate 对 Blob 类型字段进行数据添加的过程,并通过...
- 添加Hibernate相关库,包括`hibernate-core.jar`和数据库驱动。 - 创建Hibernate的配置文件(如`hibernate.cfg.xml`),配置数据库连接、实体类映射等。 - 定义实体类,继承Hibernate的`Serializable`接口,并...
在 Hibernate 中,Type 是一个关键概念,它定义了如何将 Java 类型映射到数据库字段。例如,一个 String 类型的属性可以映射到数据库的 VARCHAR 类型字段。Hibernate 还支持自定义 Type,以满足特定的业务需求。 ...
### 常用Hibernate映射配置详解 #### 1. hibernate-mapping节点解析 `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项...理解并熟练掌握这些配置,是高效利用Hibernate框架的关键。
4. Hibernate的其他配置:Hibernate配置文件还包含了一些其他关键的配置项,例如"hibernate.show_sql"用于在控制台输出执行的SQL语句,这对于调试和开发非常有用。"hibernate.hbm2ddl.auto"配置项用于根据映射文件来...
在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB...通过以上配置和操作,你可以在Spring和Hibernate的环境中顺利地对Oracle数据库的CLOB字段进行读写,满足J2EE应用中的大数据存储需求。
这个"spring2.5+hibernate基于xml配置的实例"是一个经典的组合,展示了如何在旧版本的Spring(2.5)和Hibernate中通过XML配置文件来整合和管理应用的组件。 首先,Spring 2.5是Spring框架的一个早期版本,它引入了...