精确映射:
<!-- 映射大数据,若希望精确映射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; } }