您的位置:首页 > 其它

组件映射配置

2013-09-11 10:59 274 查看
组件的映射也不常见,把对象粒度分的更细了,但是组件和宿主还是在一张表里,这样更加面向对象了,注意配置id的配置选项,组件需实现序列化接口

1,Employee.java

package com.model;

import java.io.Serializable;

public class Employee implements Serializable{
private EmployeeId employeeId;
private String address;
private int age;

public EmployeeId getEmployeeId() {
return employeeId;
}
public void setEmployeeId(EmployeeId employeeId) {
this.employeeId = employeeId;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}


2,EmployeeId.java

package com.model;

import java.io.Serializable;

public class EmployeeId implements Serializable{
private String empNo;
private String empName;

public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}

}


3,Employee.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="com.model">
<class name="Employee" table="employee">
<composite-id class="EmployeeId" name="employeeId">
<key-property name="empNo"></key-property>
<key-property name="empName"></key-property>
</composite-id>
<property name="address" column="address"></property>
<property name="age" column="age"></property>
</class>

</hibernate-mapping>


4,单元测试

@Test
public void testEmployee(){
Session s = HibernateUtil.getInstance().getSession();
s.beginTransaction();
//添加员工
EmployeeId eid = new EmployeeId();
eid.setEmpNo("02");
eid.setEmpName("name02");
Employee e = new Employee();
e.setEmployeeId(eid);
e.setAddress("sdfdf");
e.setAge(20);
s.save(e);
//查询员工
EmployeeId eid2 = new EmployeeId();
eid2.setEmpNo("01");
eid2.setEmpName("name01");
Employee employee = (Employee) s.load(Employee.class, eid2);
System.out.println(employee.getAddress());

s.getTransaction().commit();
s.close();
}


5,输出结果

sdfdf
Hibernate: insert into employee (address, age, empNo, empName) values (?, ?, ?, ?)

6,如果不是主键的组件,只需要变动一下映射文件里的配置如下

<?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="com.model">
<class name="Employee" table="employee">
<!-- <composite-id class="EmployeeId" name="employeeId">
<key-property name="empNo"></key-property>
<key-property name="empName"></key-property>
</composite-id> -->
<id column="id" name="id">
<generator class="native"></generator>
</id>
<component name="employeeId" class="EmployeeId">
<property name="empNo" column="empNo"></property>
<property name="empName" column="empName"></property>
</component>
<property name="address" column="address"></property>
<property name="age" column="age"></property>
</class>

</hibernate-mapping>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: