组件映射的表结构(只是一张表相同的数据)
person.java
public class Person {
private Integer id;
private String name;
private String sex;
private Address address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
Address.java
public class Address {
private String addr1;
private String addr2;
private String addr3;
public String getAddr1() {
return addr1;
}
public void setAddr1(String addr1) {
this.addr1 = addr1;
}
public String getAddr2() {
return addr2;
}
public void setAddr2(String addr2) {
this.addr2 = addr2;
}
public String getAddr3() {
return addr3;
}
public void setAddr3(String addr3) {
this.addr3 = addr3;
}
}
组件映射所用到了元素:
component>元素把子对象的一些元素与父类对应的表的一些字段映射起来。 然后组件可以定义它们自己的属性、组件或者集合。
person.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="hibernatedemo1.pojo.Person" table="person">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<property name="sex"></property>
<!--这里是将数据写入person这个表中-->
<component name="address" class="hibernatedemo1.pojo.Address">
<property name="addr1"></property>
<property name="addr2"></property>
<property name="addr3"></property>
</component>
</class>
</hibernate-mapping>
测试类
HibernateUtil.java
public class HibernateUtil {
private static final Configuration cfg;
private static final SessionFactory sessionFactory;
static{
cfg = new Configuration().configure();
ServiceRegistry registry = new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build();
sessionFactory=cfg.buildSessionFactory(registry);
}
public static Session openSession(){
return sessionFactory.openSession();
}
}
Demo.java
//组件映射
@Test
public void textSave(){
Session session=HibernateUtil.openSession();
Transaction tx=session.beginTransaction();
Person p=new Person();
p.setName("张三");
p.setSex("男");
Address address=new Address();
address.setAddr1("山西");
address.setAddr2("上海");
address.setAddr3("云南");
p.setAddress(address);
/**当你执行save或saveorupdate时,是将游离状态的数据变为持久状态,而持久 状态是数据库中有,session中也有 ,因为根本没有地址这张表,所以不需要session.save(address)*/
session.save(p);
tx.commit();
session.close();
}