1 当配置多对一的关系的时候,当配置到类的时候,一个类肯定不是跟一个列对应,也就是说,在表当中我们
设置的是一个外键,但是在bean当中我们用的是一个类,这个时候many-to-one就可以设置为
<many-to-one name="depart" column="depart_id"></many-to-one>。默认depart_id是department的
主键。如果不是的话,property-ref就派上用场了。但是不推荐这么做
2 notnull可以在xml中指定属性不为空。
3 一对多关系,数据库表不会修改,只是修改了javabean和配置文件
Department.java
package cn.itcast.domain;
import java.util.Set;
public class Department {
private int id;
private String name;
private Set<Employee> employees;
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package cn.itcast.domain;
public class Employee {
private int id;
private String name;
private Department depart;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Department getDepart() {
return depart;
}
public void setDepart(Department depart) {
this.depart = depart;
}
}
department.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.domain">
<class name="Department">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<set name="employees">
<key column="depart_id"/>
<one-to-many class="Employee"/>
</set>
</class>
</hibernate-mapping>
employee.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.domain">
<class name="Employee">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<many-to-one name="depart" column="depart_id"></many-to-one>
</class>
</hibernate-mapping>
package cn.itcast.dao.test;
import javax.xml.soap.DetailEntry;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import cn.itcast.dao.HibernateUtil;
import cn.itcast.domain.Department;
import cn.itcast.domain.Employee;
public class one2many {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Department department=add();
query(department.getId());
}
static Department query(int departId)
{
Session s=null;
Transaction tx=null;
try {
s=HibernateUtil.getSession();
tx=s.beginTransaction();
Department department=(Department) s.get(Department.class,departId);
Hibernate.initialize(department.getEmployees());//取消lazy加载,这样我们在主函数当中可以查询的结果显示
System.out.println("employees size:"+department.getEmployees().size());
tx.commit();
return department;
} finally {
if (s!=null)
s.close();
}
}
static Department add()
{
Session s=null;
Transaction tx=null;
try {
Department depart =new Department();
depart.setName("depart name");
Employee emp1=new Employee();
emp1.setDepart(depart);//建立两个对象之间的关联
emp1.setName("emp name1");
Employee emp2=new Employee();
emp2.setDepart(depart);//建立两个对象之间的关联
emp2.setName("emp name2");
s=HibernateUtil.getSession();
tx=s.beginTransaction();
s.save(depart);
s.save(emp1);
s.save(emp2);
tx.commit();
return depart;
} finally {
if (s!=null)
s.close();
}
}
}