组件映射配置

来源:互联网 发布:淘宝助理教学视频 编辑:程序博客网 时间:2024/05/01 20:50

组件的映射也不常见,把对象粒度分的更细了,但是组件和宿主还是在一张表里,这样更加面向对象了,注意配置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,单元测试

@Testpublic 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,输出结果

sdfdfHibernate: 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>



原创粉丝点击