初学Hibernate:
简单测试下双向关联的多对一配置:
新建2个实体类:
package ray.many2one;
public class Employ {
private int e_id;
private String name;
//维护一个一方,类似于数据库中的外键
private Departs departs;
public int getE_id() {
return e_id;
}
public void setE_id(int e_id) {
this.e_id = e_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Departs getDeparts() {
return departs;
}
public void setDeparts(Departs departs) {
this.departs = departs;
}
}
Departs类:
package ray.many2one;
import java.util.HashSet;
import java.util.Set;
public class Departs {
private int d_id;
private String d_name;
//维护一个set,方便业务查询,双向关联多方
private Set<Employ> employs = new HashSet<Employ>();
public int getD_id() {
return d_id;
}
public void setD_id(int d_id) {
this.d_id = d_id;
}
public String getD_name() {
return d_name;
}
public void setD_name(String d_name) {
this.d_name = d_name;
}
public Set<Employ> getEmploys() {
return employs;
}
public void setEmploys(Set<Employ> employs) {
this.employs = employs;
}
}
新建2个配置映射文件
Departs.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="ray.many2one">
<class name="Departs" table="_departs" lazy="true">
<id name="d_id">
<generator class="native"></generator>
</id>
<property name="d_name"></property>
<!-- 配置set仅仅是在查询时有效,不参与数据库表设计 -->
<set name="employs" cascade="all" inverse="true">
<key>
<column name="d_id"></column>
</key>
<one-to-many class="Employ"/>
</set>
</class>
</hibernate-mapping>
Employ.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="ray.many2one">
<class name="Employ" table="_employ" lazy="true">
<id name="e_id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<!-- 参与数据库中表设计,=外键 -->
<many-to-one name="departs" column="d_id"></many-to-one>
</class>
</hibernate-mapping>
测试代码类
package ray.many2one;
import org.hibernate.Session;
import ray.SessionUtil.HibernateSessionFactory;
public class Test {
public static void main(String[] args) {
Departs departs = new Departs();
departs.setD_name("北京昌平");
Employ e1 = new Employ();
e1.setName("雷子诺");
e1.setDeparts(departs);
Employ e2 = new Employ();
e2.setName("雷盼");
e2.setDeparts(departs);
departs.getEmploys().add(e1);
<span style="white-space:pre"> </span>departs.getEmploys().add(e2);
Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
session.save(departs);
session.save(e1);
session.save(e2);
session.getTransaction().commit();
session.close();
}
}
输出:
Hibernate:
create table _departs (
d_id integer not null auto_increment,
d_name varchar(255),
primary key (d_id)
)
Hibernate:
create table _employ (
e_id integer not null auto_increment,
name varchar(255),
d_id integer,
primary key (e_id)
)
Hibernate:
alter table _employ
add index FK_502n873lyy6n844vnbg26hov0 (d_id),
add constraint FK_502n873lyy6n844vnbg26hov0
foreign key (d_id)
references _departs (d_id)