多对一(Many-to-One)映射
多对一(many-to-one)关联是最常见的关联关系,其中一个对象可以与多个对象相关联。例如,一个相同的地址对象可以与多个雇员的对象相关联。
定义RDBMS表:
考虑一个情况,我们需要员工记录存储在EMPLOYEE表,将有以下结构:
此外,许多员工都可以有相同的地址,所以这种关联可以使用许多一对一的关联呈现。我们将存储地址相关的信息在一个单独的表,该表具有以下结构:
create table ADDRESS ( id INT NOT NULL auto_increment, street_name VARCHAR(40) default NULL, city_name VARCHAR(40) default NULL, state_name VARCHAR(40) default NULL, zipcode VARCHAR(10) default NULL, PRIMARY KEY (id));同时创建RBDMS表,并让他们准备下一个实现。
定义POJO类:
让我们实现一个POJO类员工将被用于保存与EMPLOYEE表的对象和其地址类型的变量。
我们需要定义相应的地址表,这样地址对象可以存储和检索到地址表中的另一个POJO类。
import java.util.*;public class Address{ private int id; private String street; private String city; private String state; private String zipcode; public Address() {} public Address(String street, String city, String state, String zipcode) { this.street = street; this.city = city; this.state = state; this.zipcode = zipcode; } public int getId() { return id; } public void setId( int id ) { this.id = id; } public String getStreet() { return street; } public void setStreet( String street ) { this.street = street; } public String getCity() { return city; } public void setCity( String city ) { this.city = city; } public String getState() { return state; } public void setState( String state ) { this.state = state; } public String getZipcode() { return zipcode; } public void setZipcode( String zipcode ) { this.zipcode = zipcode; } }定义Hibernate映射文件:
开发我们的映射文件,可指示Hibernate如何定义的类映射到数据库表。<many-to-one>进行元素将被用来定义规则建立Employee和Address实体之间的多对一关系。
编译和执行:
如果检查员工和证书表,就应该记录下了:
mysql> select * from employee;+----+------------+-----------+--------+| id | first_name | last_name | salary |+----+------------+-----------+--------+| 1 | Manoj | Kumar | 5000 |+----+------------+-----------+--------+1 row in set (0.00 sec)mysql> select * from certificate;+----+------------------+-------------+| id | certificate_name | employee_id |+----+------------------+-------------+| 1 | MBA | 1 || 2 | PMP | 1 || 3 | MCA | 1 |+----+------------------+-------------+3 rows in set (0.00 sec)