关联映射
------------------------------------------------
- 多对一(Employee-Deapartment)
- 一对多(Department-Employee)
- 一对一(person-idCard)
- 多对多(teacher-student)
- 组件映射(User-Name)
- 集合映射(set,list,map,bag)
- inverse和cascade(Employee-Department)
------------------------------------------------
多对一(Employee-Department)
映射文件
------------------------------------------------
对象:
//部门(主表)
public class Department{
private int id;
private String name;
}
//员工(副表)
public class Employee{
private int id;
private String name;
// private in departid; //外键
private Department depart; //对象之间的导航
}
------------------------------------------------
映射文件:
Department.hbm.xml
<hibernate-mapping>
package="cn.itcast.hibernate.domain"
<class name="Department"
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
Employee.hbm.xml
<hibernate-mapping>
package="cn.itcast.hibernate.domain"
<class name="Employee"
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="depart" column="depart_id"/>
</class>
</hibernate-mapping>
-------------------------------------------------
many-to-one:
property的标签下的name处理:从表中将name字段直接赋
给对象的name属性就完了。 对于many-to-one不是简单
的将depart_id赋给depart属性。
它会根据name="depart"
通过反射得到depart类型,然后找到depart的映射文件,
进而得到depart对象
column="depart_id" 为缺省id,默认为depart表中的主键。
如果想让其他列为主键(比如name)
<many-to-one name="depart" column="depart_id" property-ref="name">
static Department add(){
Session s=null;
Transaction tx=null;
try{
Department dpart=new Department();
separt.setName("depart name");
Employee emp=new Employee();
emp.setDepart(depart);//两表建立关联
emp.setName("emp name");
s=HibernateUtil.getSession();
tx=s.beginTransaction();
s.save(depart);
s.save(emp);
tx.commit();
}finally{
fi(s!=null)
s.close();
}
}
输出sql
Hibernate:insert into Department(name) values(?)
Hiberante:insert into Employee(name,dpart_id) values(?,?)
------------------------------------------------
将 s.save(depart);
s.save(emp); 倒换:
输出sql
Hibernate:insert into Employee(name,depart_id) values(?,?)
Hibernate:insert into Department(name) values(?)
------------------------------------------------
- 多对一(Employee-Deapartment)
- 一对多(Department-Employee)
- 一对一(person-idCard)
- 多对多(teacher-student)
- 组件映射(User-Name)
- 集合映射(set,list,map,bag)
- inverse和cascade(Employee-Department)
------------------------------------------------
多对一(Employee-Department)
映射文件
<many-to-one name="depart" column="depart_id">
------------------------------------------------
对象:
//部门(主表)
public class Department{
private int id;
private String name;
}
//员工(副表)
public class Employee{
private int id;
private String name;
// private in departid; //外键
private Department depart; //对象之间的导航
}
------------------------------------------------
映射文件:
Department.hbm.xml
<hibernate-mapping>
package="cn.itcast.hibernate.domain"
<class name="Department"
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
Employee.hbm.xml
<hibernate-mapping>
package="cn.itcast.hibernate.domain"
<class name="Employee"
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="depart" column="depart_id"/>
</class>
</hibernate-mapping>
-------------------------------------------------
many-to-one:
property的标签下的name处理:从表中将name字段直接赋
给对象的name属性就完了。 对于many-to-one不是简单
的将depart_id赋给depart属性。
它会根据name="depart"
通过反射得到depart类型,然后找到depart的映射文件,
进而得到depart对象
column="depart_id" 为缺省id,默认为depart表中的主键。
如果想让其他列为主键(比如name)
<many-to-one name="depart" column="depart_id" property-ref="name">
static Department add(){
Session s=null;
Transaction tx=null;
try{
Department dpart=new Department();
separt.setName("depart name");
Employee emp=new Employee();
emp.setDepart(depart);//两表建立关联
emp.setName("emp name");
s=HibernateUtil.getSession();
tx=s.beginTransaction();
s.save(depart);
s.save(emp);
tx.commit();
}finally{
fi(s!=null)
s.close();
}
}
输出sql
Hibernate:insert into Department(name) values(?)
Hiberante:insert into Employee(name,dpart_id) values(?,?)
------------------------------------------------
将 s.save(depart);
s.save(emp); 倒换:
输出sql
Hibernate:insert into Employee(name,depart_id) values(?,?)
Hibernate:insert into Department(name) values(?)
Hibernate:update Employee set name=?,depart_id=?where id=?