1.key是指外键
比如:
<hibernate-mapping>
<class name="com.domain.Classes" table="classes" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" not-null="true" />
</property>
<bag name="studentNames" table="student">
<!-- key对应的都是外键,其意思也就是拿该外键和<id>的主键值匹配,取集合 -->
<key column="classId"></key>
<element column="name" type="string"></element>
</bag>
</class>
</hibernate-mapping>
2.many开头的是持有外键
<hibernate-mapping>
<class name="com.domain.Computer" table="computer" catalog="onetoone">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" not-null="true" />
</property>
<!-- many开头的是代表该表持有外键 -->
<many-to-one name="student" class="com.domain.Student" unique="true">
<column name="student_id" />
</many-to-one>
</class>
</hibernate-mapping>
3.在many-to-many里,由inverse控制得到主动权后,在 save的对象赋值的时候,不需要双向赋值,只
需要给掌握主动权的对象赋值即可。没有inverse的(比如one-to-one里),需要给双方都赋值,比如
:
Session session = HibernateSessionFactory.getSession();
Teacher teacher1 = new Teacher();
teacher1.setName("teacher1");
Teacher teacher2 = new Teacher();
teacher2.setName("teacher2");
Teacher teacher3 = new Teacher();
teacher3.setName("teacher3");
Student student1 = new Student();
student1.setName("student1");
Student student2 = new Student();
student2.setName("student2");
//student1.getTeachers().add(teacher1);student1.getTeachers().add
(teacher2);student2.getTeachers().add(teacher1);这几句代码可以不要,因为Teacher掌握主动权
。所以下面几句代码给注释掉了
// //学生一有2个老师
// student1.getTeachers().add(teacher1);
// student1.getTeachers().add(teacher2);
//
// //学生二有一个老师
// student2.getTeachers().add(teacher1);
//因为老师是inverse="false" ,老师掌握主动权
//第一个老师有2个学生
teacher1.getStudents().add(student1);
teacher1.getStudents().add(student2);
//第二个老师有一个学生
teacher2.getStudents().add(student1);
session.saveOrUpdate(teacher1);
session.saveOrUpdate(teacher2);
session.beginTransaction().commit();
session.close();
4.<one-to-one><one-to-many><many-to-many>都没有 invsere属性,因为inverse属性的意思是是否为
虚的,比如:invere="true"就是表示该表的操作不会影响到关系表。
比如one-to-one中,通过关系表实现
通过关系表实现:
DROP TABLE IF EXISTS `st`;
create table stu_com(
stu_id int not null,
com_id int not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
<!--optional="true"的意思是只有当stu_id 和 com_id 都不为空时才在关系表里插入。这样也会插入
2遍,所以需要inverse="true"把一方设置为虚的。即不让插入到关系表中-->
<join table="stu-com" optional="true" inverse="true">
<key column="com_id"/>
<many-to-one name="student" column="stu_id" unique="true"/>
</join>
分享到:
相关推荐
SSH之Hibernate总结 SSH(Struts、Spring、Hibernate)是Java Web开发中常见的三大框架,而Hibernate作为ORM(对象关系映射)框架,是连接Java应用程序与数据库的关键组件。本总结将围绕Hibernate的核心概念、配置...
【Hibernate总结】 Hibernate是一个强大的Java持久化框架,它封装了JDBC,负责对象持久化,作为应用程序和数据库之间的中间层。映射关系是通过配置文件维护的,这使得Hibernate能够与不同的数据库系统灵活地交互。 ...
本资源包含的"hibernate总结练习源码"提供了对Hibernate ORM框架实际应用的实例,有助于深入理解和掌握其核心概念与功能。 1. **对象关系映射(ORM)**:Hibernate 提供了一种机制,将数据库中的表映射为Java类,表...
《Hibernate总结(三)》 在本篇关于Hibernate的总结中,我们将深入探讨这个流行的Java对象关系映射(ORM)框架的关键概念和技术细节。Hibernate作为一款强大的工具,它极大地简化了Java开发人员处理数据库操作的工作...
标题:hibernate总结 描述:此文档是个人在使用Hibernate框架进行数据持久化操作时的经验积累和技巧分享。文档全面覆盖了Hibernate的各种配置方法、数据映射技术、集合类映射、对象关系映射(ORM)基础以及与J2EE...
### 学习Hibernate总结 #### 一、简介与配置 Hibernate是Java环境下一款优秀的对象关系映射(ORM)框架,它极大地简化了数据访问层(DAL)的编码工作,允许开发人员将主要精力集中在业务逻辑上而不是繁琐的SQL语句...
1. 引入Hibernate所需的JAR文件,例如在Eclipse中创建Hibernate类库。 2. 创建配置文件`hibernate.cfg.xml`,其中包含数据库连接信息、日志格式等。 3. 设计实体类,对应数据库表中的记录,并提供对应的getter和...
**总结项目实战** 在实际项目中,使用 Hibernate 可以简化数据库操作,提高开发效率。常见的应用场景包括用户管理、订单处理、商品分类等。项目实践中要注意合理设计实体关系,避免 N+1 查询问题,利用缓存优化性能...
《Hibernate4总结文档》 Hibernate4作为一款强大的Java对象关系映射框架,简化了数据库操作,使得开发者可以更专注于业务逻辑而不是数据库层面的细节。本文将深入探讨Hibernate4的配置和使用,帮助开发者更好地理解...
总结来说,Hibernate是一个强大的ORM框架,它极大地简化了Java应用的数据库操作,提高了开发效率,并提供了高级特性如缓存、事务管理等。通过深入理解和熟练使用Hibernate,开发者可以构建更高效、更易于维护的...
Hibernate是一个在Java环境中广泛使用的数据持久化工具,它支持对象关系映射(ORM)技术,将Java对象映射到关系型数据库的表中。Hibernate允许开发者通过面向对象的方式来操作数据库,避免了直接使用SQL语句的繁琐...
【Hibernate 简单 PPT 总结】 Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。通过提供一套API和元数据,Hibernate允许开发者将业务对象直接映射到数据库表,从而避免了...