对方案一的hibernate实现,利用hibernate中的父子关系来解决:
java文件
public class Party {
Long partyId;
String partyRole;
}
public class Person {
Long id;
Party party;
String login;
String name;
String sex;
......
}
public class Department {
Long id;
Party party;
String name;
String address;
......
}
public abstract class PartyRelationship {
Long id;
Party partyFrom;
Party partyTo;
String partyRole;
}
public class PersonRelationship extends PartyRelationship{}
public class DepartmentRelationship extends PartyRelationship{}
public class PersonDepartment extends PartyRelationship{}
hbm.xml文件
<hibernate-mapping package="com.bulain.model">
<class name="Party" table="party">
<id name="partyId" column="party_id" type="java.lang.Long" >
<generator class="native"/>
</id>
<property name="partyRole" column="party_role" type="java.lang.String"/>
</class>
<class name="Person" table="person">
<id name="id" column="id" unsaved-value="0">
<generator class="foreign">
<param name="property">party</param>
</generator>
</id>
<one-to-one name="party" class="Party" cascade="all" constrained="true" />
<property name="login" column="login" type="java.lang.String"/>
<property name="name" column="name" type="java.lang.String"/>
<property name="sex" column="sex" type="java.lang.String"/>
</class>
<class name="Department" table="department">
<id name="id" column="id" unsaved-value="0">
<generator class="foreign">
<param name="property">party</param>
</generator>
</id>
<one-to-one name="party" class="Party" cascade="all" constrained="true"/>
<property name="name" column="name" type="java.lang.String"/>
<property name="address" column="address" type="java.lang.String"/>
</class>
<class name="PartyRelationship" table="party_relationship" abstract="true">
<id name="id" column="id" type="java.lang.Long">
<generator class="native"/>
</id>
<discriminator column="party_role" type="java.lang.String"/>
<many-to-one name="partyFrom" column="party_from_id" not-null="true"/>
<many-to-one name="partyTo" column="party_to_id" not-null="true"/>
<subclass name="PersonRelationship" discriminator-value="per_per">
<property name="partyRole" column="party_role" insert="false"
update="false"/>
</subclass>
<subclass name="PersonDepartment" discriminator-value="per_dept">
<property name="partyRole" column="party_role" insert="false"
update="false"/>
</subclass>
<subclass name="DepartmentRelationship" discriminator-value="dept_dept">
<property name="partyRole" column="party_role" insert="false"
update="false"/>
</subclass>
</class>
</hibernate-mapping>
对于这个实现所以关系仍在party_relationship这张表中进行维护,通过PersonRelationship、DepartmentRelationship、PersonDepartment这三个子类进行维护。
分享到:
相关推荐
18. 示例:不同的映射:除了父子关系映射,还可能有其他类型的映射,如多对多关系映射、一对一关系映射等。这里应该会介绍如何处理这些复杂的映射场景。 19. 最佳实践:最后,文档将总结Hibernate开发中的一些最佳...
本文将深入探讨“Hibernate父亲与孩子”这一主题,即Hibernate中的多对一和一对多关系映射,以及如何利用Hibernate处理面向对象的树型结果。 在数据库设计中,"父亲"和"孩子"的概念通常对应于实体之间的关联关系,...
总之,《Hibernate Annotations 中文帮助文档》是Java开发者的宝贵资源,它详细解释了如何利用注解进行ORM配置,提高开发效率,并提供了完整的数据库交互解决方案。无论是初学者还是经验丰富的开发者,都能从中获益...
在这个"struts2 hibernate 实现无限级联 树形分类"项目中,主要目标是创建一个能够展示无限级联的树形分类结构。这种结构通常用于组织层次化的数据,如产品类别、部门结构或者权限角色等。无限级联意味着这个树可以...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
总结来说,映射树形结构在Hibernate中是一项重要技能,它涉及到对数据库设计的理解和ORM框架的熟练运用。掌握不同的映射策略以及如何在代码中实现它们,将有助于提升开发效率并优化应用程序性能。通过研究提供的...
7. **一对多、多对一、多对多关系**:Hibernate支持多种关系映射,如实体类间的父子关系、一对多关系、多对一关系和多对多关系,通过配置文件或注解设定。 8. **缓存机制**:为了提高性能,Hibernate提供了缓存机制...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
而Hibernate则是一个全功能的对象关系映射(ORM)解决方案,它极大地简化了数据库操作的复杂度。将Struts2与Hibernate结合使用,可以构建出高效、灵活的应用系统。本文将详细介绍如何利用Struts2和Hibernate实现对单...
本项目利用Java技术栈,结合Struts和Hibernate框架,实现了这一功能。下面将详细介绍这个项目的知识点。 1. **Struts框架**: Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它有助于简化...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
5. **双向一对多**:如果在父子类中都定义了引用,记得在`@ManyToOne`和`@OneToMany`注解中互相引用,以建立完整的双向关系。 6. **示例代码**: ```java @Entity public class User { @Id private Long id; ...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
### Hibernate4核心知识点详解 #### 一、Hibernate4简介与...通过上述知识点的学习,可以全面了解Hibernate4的核心功能及其在实际项目中的应用技巧,帮助开发者更好地利用Hibernate4来提高Java应用的开发效率和质量。
21.5 利用Hibernate的版本控制来实现乐观锁 21.5.1 使用元素 21.5.2 使用元素 21.5.3 对游离对象进行版本检查 21.5.4 强制更新版本 21.6 实现乐观锁的其他方法 21.7 小结 21.8 思考题 第22章 管理...
在Hibernate的hbm.xml文件中,一对一关系通过标签,一对多关系通过、、或标签来定义。需要详细指定实体类名、主键列名以及关联的外键列名。 2. 注解配置: 在实体类上直接使用@OneToOne、@OneToMany等注解进行关系...
1. **保存**:当创建新的父子关系时,只需在父实体中添加子实体到集合,然后保存父实体即可。Hibernate会自动处理子实体的保存。 2. **检索**:可以通过父实体的引用集合来获取所有子实体。如果需要根据子实体查询...
这个案例将帮助开发者理解如何在实际项目中结合Struts、Spring和Hibernate完成数据操作,特别是分页查询这一常见需求,提供了一套完整的解决方案。通过学习和实践,可以提升对Java企业级开发的理解和应用能力。