组件映射配置

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值