hibernate一对多,多对一的关联关…
来源:互联网 发布:电脑温度软件2017 编辑:程序博客网 时间:2024/04/28 18:00
Department.hbm.xml文件的配置
<generatorclass="native"/> <keycolumn="depart_id"></key> <one-to-manyclass="beans.Employee"/>
<generatorclass="native"/>
.addResource("beans/Department.hbm.xml") .buildSessionFactory(); }
<classname="beans.Department">
<id name="id" type="int"column="id">
</id>
<property name="name"type="string" not-null="true"column="name"/>
<set name="employees"inverse="true">
</set>
<!-- 一的这方要在set中配置关联的employee中的外键及关联的实体类-->
</class>
Employee.hbm.xml文件的配置
<classname="beans.Employee">
<id name="id" type="int"column="id">
</id>
<property name="name"type="string" column="name"/>
<property name="gender"type="string" column="gender"/>
<property name="salary"type="float" column="salary"/>
<many-to-onename="department" column="depart_id"class="beans.Department"></many-to-one>
<!-- 多的这方也要在配置关联的外键及关联一的那方的实体类-->
</class>
public classTestOne2Many文件
public classTestOne2Many {
private static SessionFactorysessionfactory;
static{
Configuration cfg=newConfiguration();
sessionfactory=cfg.configure("hibernate.cfg.xml").addResource("beans/Employee.hbm.xml")
}
@Test
public void save(){
Sessionsession=sessionfactory.openSession();
Transaction tx= null;
try{
tx=session.beginTransaction();
Department department=newDepartment();
department.setName("行政部");
Employee employee=newEmployee();
employee.setName("mrlun");
employee.setGender("男");
employee.setSalary(4000);
- employee.setDepartment(department);
- Employee employee1=newEmployee();
- employee1.setName("mrlun");
- employee1.setGender("男");
- employee1.setSalary(4000);
- employee1.setDepartment(department);
- Set<Employee>set=new HashSet();
- set.add(employee);
- set.add(employee1);
- //department.setEmployees(set);
- session.save(department);
- session.save(employee);
- session.save(employee1);
tx.commit();
}catch(Exception e){
session.getTransaction().rollback();
e.printStackTrace();
}finally{
session.close();
}
}
说明,多的那一放不能放弃维护关联关系,没有inverse属性,默认一的那方(Department)的inverse属性是false,即没有放弃关联关系的维护,所以,默认一的那方是维护关联关系的。
当第1,6行代码存在,而第10行代码被注释了之后,或第1,6行代码被注释,而第10行代码存在的时候,均可以实现部门和员工的成功保存。而此时由于两方都会维护关联关系,所以在先保存了部门后,再保存员工,部门id已经有了,所以只有员工这方会去维护关联关系,此时会在insert的基础上多出两条update语句。当把第11条移到13行的后面时,此时员工和部门都需要维护关联关系,所以此时会多出四条update语句。
当把一的那方的inverse设为true时,表示一的那方放弃维护关联关系,此时若注释掉1,6行,即使有第10行存在,也不会将部门id存到员工表,因为部门不能维护,而员工这方没有部门的信息,也不能维护。但此时有1,6行,注释掉第10行,则可以成功保存,因为员工这方维护了关联关系。
0 0
- hibernate一对多,多对一的关联关…
- hibernate一对多,多对一的关联关…
- hibernate一对多,多对一关联
- Hibernate一对多、多对一关联关系的使用
- hibernate一对多 多对一 的 双向关联
- hibernate多对一关联和一对多关联
- 关于hibernate的多对一单向关联,一对多单向关联,和一对多双向关联的疑惑解答
- 关于hibernate的多对一单向关联,一对多单向关联,和一对多双向关联的疑惑解答
- 关于hibernate的多对一单向关联,一对多单向关联,和一对多双向关联的疑惑解答
- hibernate的多对一,一对多单向关联,双向关联区别与联系
- hibernate中多对一和一对多关联入门
- Hibernate关联关系映射 一对一 一对多 多对一
- hibernate关联映射阐述一对多与多对一
- hibernate关联关系中的一对多以及多对一
- hibernate中一对多(多对一)双向关联
- Hibernate关联关系映射(一对多/多对一)
- hibernate双向一对多/多对一关联
- hibernate多对一和一对多双向关联
- linux远程登录windows
- Java 并发
- Asp.net MVC2实现分页
- Js 获取url参数的方法
- mysql 表结构导入导出
- hibernate一对多,多对一的关联关…
- hibernate映射类型
- hibernate继承结构映射
- SimpleDateFormat的常用方法
- 使用getGenericSuperclass()和getA…
- hibernate一对多,多对一的关联关…
- 常见的HTTP错误码的具体含义
- Hibernate的几种查询方式
- hibernate-get和load方法异同【转…