精确映射:
<!-- 映射大数据,若希望精确映射sql类型,则使用sql-type来指定字段类型:比如想要mediumtext,但是映射成为 了text -->
<property name="image">
<column name="IMAGE" sql-type="mediumblob"></column>
</property>
映射组成关系
建立域模型和关系数据模型有着不同的出发点:
域模型: 由程序代码组成, 通过细化持久化类的的粒度可提高代码的可重用性, 简化编程
在没有数据冗余的情况下, 应该尽可能减少表的数目, 简化表之间的参照关系, 以便提高数据的访问速度
(也就是说,在java中是多个类,在数据表中是一个表,比如员工有工资,而工资是一个但单独的类.工资中有员工,员工中有工资)
Hibernate 把持久化类的属性分为两种:
值(value)类型: 没有 OID, 不能被单独持久化, 生命周期依赖于所属的持久化类的对象的生命周期
实体(entity)类型: 有 OID, 可以被单独持久化, 有独立的生命周期
显然无法直接用 property 映射 pay 属性
Hibernate 使用 元素来映射组成关系, 该元素表名 pay 属性是 Worker 类一个组成部分, 在 Hibernate 中称之为组件
<!-- 映射组成关系 -->
<component name="pay" class="Pay" >
<parent name="worker"/>
<!-- 指定组成关系的组件的属性 -->
<property name="mouthSalary" column="mouth_salary"></property>
<property name="yearSalary" column="year_salary"></property>
<property name="volidate" column="volidate"></property>
</component>
- Worker
package com.hgh.hibernate.helloworld;
public class Worker {
private Integer id;
private String name;
private Pay pay;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Worker() {
super();
// TODO Auto-generated constructor stub
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Pay getPay() {
return pay;
}
public void setPay(Pay pay) {
this.pay = pay;
}
}
- Pay
package com.hgh.hibernate.helloworld;
public class Pay {
private int mouthSalary;
private int yearSalary;
private int volidate;
private Worker worker;
public Worker getWorker() {
return worker;
}
public void setWorker(Worker worker) {
this.worker = worker;
}
public int getMouthSalary() {
return mouthSalary;
}
public void setMouthSalary(int mouthSalary) {
this.mouthSalary = mouthSalary;
}
public int getYearSalary() {
return yearSalary;
}
public void setYearSalary(int yearSalary) {
this.yearSalary = yearSalary;
}
public int getVolidate() {
return volidate;
}
public void setVolidate(int volidate) {
this.volidate = volidate;
}
}