问题:删除上级时候不会同时删除下级。
实体类
public class Department implements Serializable {
//部门ID
private Long departmentId;
//部门名称
private String name;
//父部门
private Department parent;
//部门描述
private String description;
//子部门
private Set<Department> childs = new HashSet<Department>();
get,set方法都已经设置,没贴上来,太占地方
}
hbm文件
<class name="Department" table="tab_department">
<id name="departmentId" type="java.lang.Long">
<column name="departmentId" precision="10" scale="2" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="20" />
</property>
<property name="description" type="java.lang.String">
<column name="description" length="255" />
</property>
<!-- 和父部门的多对一关系 -->
<many-to-one name="parent" class="Department" column="parentId" lazy="false"/>
<!-- 和子部门的一对多关系 -->
<set name="childs" cascade="all" lazy="false" inverse="true">
<key column="parentId"/>
<one-to-many class="Department"/>
</set>
</class>
出错信息
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`bysj/tab_department`, CONSTRAINT `FK1D92BA3C4CF7CB6A` FOREIGN KEY (`parentId`) REFERENCES `tab_department` (`departmentId`))
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1169)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:693)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1404)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1318)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1303)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy26.executeUpdate(Unknown Source)
相关推荐
通过使用Hibernate,开发者可以避免编写大量的JDBC代码,提高开发效率并减少出错的可能性。 二、安装与配置 在开始使用Hibernate 4.1之前,需要将其依赖库添加到项目的类路径中。通常,这可以通过Maven或Gradle等...
在Hibernate中,我们需要创建一个`hibernate.cfg.xml`配置文件来设置数据库连接信息,以及`hibernate.hbm.xml`或使用注解的方式来定义对象与数据库表的映射关系。实体类通常包含属性,这些属性对应于数据库表的列,...
总的来说,"hibernateDemo_001"项目为我们提供了一个实践Hibernate的平台,通过它,我们可以学习到如何配置Hibernate、创建实体类、编写映射文件、操作Session、执行查询、管理事务以及应用懒加载和级联操作等核心...
4. 新的持久化模型:支持复合主键、级联操作等更复杂的持久化模型。 5. 可配置的延迟加载:通过注解可以控制属性或关联关系的延迟加载行为。 四、实战应用 1. 创建实体类:利用@Entity、@Table、@Id等注解创建符合...
关联关系可以通过外键或代理键实现,配置包括懒加载(lazy loading)和级联操作(cascading)。 **缓存机制** Hibernate 提供了缓存策略以提高性能,包括一级缓存(Session 缓存)和二级缓存(可选,如 EhCache)...
在数据持久化的过程中,Hibernate提供了多种级联操作,如保存(Cascade.PERSIST)、更新(Cascade.UPDATE)和删除(Cascade.REMOVE)。这使得对一个对象的操作可以直接影响到与其关联的对象,简化了代码。 事务管理...
10. **级联操作(Cascading)**:在关联关系中,设置级联操作可以使得对一方的操作自动影响到另一方,如删除一个用户时,其相关的订单也一同被删除。 11. **缓存(Caching)**:为了提高性能,Hibernate提供了缓存...
此外,Hibernate还支持级联操作、懒加载和多对多关系映射等复杂功能,使得处理复杂的数据库关系变得简单。 总之,Hibernate培训讲座的目标是让学员掌握ORM的核心理念,熟练使用Hibernate进行数据库操作,以提升他们...
通过Hibernate,开发者可以使用面向对象的方式来处理数据库操作,提高开发效率并减少出错的可能性。 2. **Hibernate的核心组件** - **SessionFactory**: 作为线程安全的会话工厂,负责创建Session对象,是...
综上所述,Hibernate是一个强大的ORM工具,通过深入学习和实践,开发者可以有效地将Java对象与数据库进行无缝对接,提高开发效率,减少出错概率。这三本书籍将为初学者和有经验的开发者提供宝贵的指导,帮助他们更好...
除了基本的CRUD操作,Hibernate还支持级联操作、延迟加载、缓存机制、查询语言HQL(Hibernate Query Language)以及 Criteria 查询等高级特性。HQL是一种面向对象的查询语言,类似于SQL但更加面向Java对象,使得查询...
ORM框架允许开发者使用面向对象的编程方式来操作数据库,而无需关心底层的SQL语句,从而提高了开发效率并降低了出错概率。本文档将深入探讨Hibernate的核心概念、配置、实体类、映射文件、查询语言以及其他关键特性...
然而,JDBC的直接使用涉及到大量重复的代码,如打开和关闭连接、处理SQL语句等,这在复杂的项目中显得繁琐且容易出错。Hibernate作为ORM(对象关系映射)工具,通过将Java对象与数据库表映射,实现了数据操作的面向...
1. 配置Hibernate:通过hibernate.cfg.xml文件设置数据库连接信息,实体类映射等。 2. 创建SessionFactory:基于配置信息,创建SessionFactory对象。 3. 获取Session:通过SessionFactory获取Session实例,用于执行...
1. **级联操作(Cascading)**: 可以设置实体间的关系,比如一个实体的更改会影响到关联的实体,如`CascadeType.ALL`表示所有操作都级联。 2. **懒加载(Lazy Loading)**: Hibernate允许延迟加载关联对象,直到真正...
通过 Hibernate,开发者可以避免编写大量的 JDBC 代码,从而提高开发效率,减少出错的可能性。 **安装与配置 Hibernate** 在使用 Hibernate 之前,你需要先下载 Hibernate 的 JAR 包,并将其添加到项目的类路径中...
《Hibernate初识:深入理解与实践》 ...本文仅作为Hibernate的入门介绍,实际使用中还需深入学习更多高级特性,如级联操作、懒加载、代理对象等。希望这篇文章能为你的Hibernate学习之旅打下坚实的基础。
这包括创建`hibernate.cfg.xml`配置文件,其中包含了数据库连接信息、方言设置、缓存策略等。此外,还需要为每个持久化类创建对应的映射文件(.hbm.xml),定义对象与数据库表之间的映射关系。 三、实体类与映射 ...
2. **级联操作**:一个操作影响关联的对象,如删除一个用户时,关联的角色也被同时删除。 3. **缓存机制**:一级缓存(Session)和二级缓存(可选)提升数据访问速度。 4. **查询优化**:避免N+1查询问题,使用...